From 4db8e24a7b1f27ea7e28f6ebd817ac1aefaf5999 Mon Sep 17 00:00:00 2001 From: Jason Rhinelander Date: Thu, 11 Jan 2018 11:42:22 -0400 Subject: [PATCH] Use a named rather than anon struct in instance The anonymous struct nested in a union triggers a -Wnested-anon-type warning ("anonymous types declared in an anonymous union are an extension") under clang (#1204). This names the struct and defines it out of the definition of `instance` to get around to warning (and makes the code slightly simpler). --- include/pybind11/detail/common.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/pybind11/detail/common.h b/include/pybind11/detail/common.h index 7d629c0ff8..4b2b08499d 100644 --- a/include/pybind11/detail/common.h +++ b/include/pybind11/detail/common.h @@ -381,16 +381,18 @@ constexpr size_t instance_simple_holder_in_ptrs() { struct type_info; struct value_and_holder; +struct nonsimple_values_and_holders { + void **values_and_holders; + uint8_t *status; +}; + /// The 'instance' type which needs to be standard layout (need to be able to use 'offsetof') struct instance { PyObject_HEAD /// Storage for pointers and holder; see simple_layout, below, for a description union { void *simple_value_holder[1 + instance_simple_holder_in_ptrs()]; - struct { - void **values_and_holders; - uint8_t *status; - } nonsimple; + nonsimple_values_and_holders nonsimple; }; /// Weak references PyObject *weakrefs;