seh*_*ehe 8 c++ static-assert pod visual-c++
鉴于以下内容
#include <array>
struct litmus final : std::array<unsigned char, 16>
{
};
static_assert(std::is_pod<std::array<unsigned char, 16> >::value, "not pod");
// this fails on MSVC:
static_assert(std::is_pod<litmus>::value, "not pod");
Run Code Online (Sandbox Code Playgroud)
以下编译器同意litmuspod:
但是,MSVC12(VS2013 RTM)认为第二个断言失败.
编辑有关信息:
is_trivially_copyable<litmus>在MSVC上返回true-ness.对于许多不严格要求实际POD的情况,这可能很有用.
GCC和Clang; 那个班是POD.
这取决于你对"使MSVC将该类视为pod"的确切含义.如果你的意思是编译器内部,那么没有.但是,您可以(在实践中)将特征专门用于litmus:
namespace std {
template <>
struct is_pod<litmus> : std::true_type
{};
}
Run Code Online (Sandbox Code Playgroud)
请注意,严格遵循标准,这会给出未定义的行为(感谢@ R.MartinhoFernandes指出这一点).但是,作为特定于编译器的解决方法,我希望它能够正常工作.使用没有任何保证.