我想在实例化时使用static_assert检查以下结构的大小,以约束未命名的struct紧密打包,因此A的大小等于sizeof(T)* 3.
template <typename T> struct A { union { struct { T a,b,c; }; T arr[3]; }; };
这可以用
static_assert(sizeof(A<T>) == sizeof(T) * 3,"hey something went wrong");
然而
>因为A< T>在其类定义中仍然是一个不完整的类型,将上面的static_assert放入类定义中不是一个选项
> staticofassert with sizeof不评估所有编译器(如Clang)中未实例化的函数内部,因此将它放入虚拟成员函数不是一个选项
>将static_assert放到构造函数或析构函数中将是一个解决方案,但在上面的示例中不存在用户定义的构造函数(考虑聚合),进一步想象多个构造函数的情况,我将避免在所有构造函数中执行断言
>从另一个结构继承A,并在A的定义中对它执行static_assert将是一个解决方案,但我想保持结构简单,而不会弄乱辅助结构
我失踪的任何其他解决方案?