鉴于以下内容
#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");
以下编制者同意litmus
是pod:
但是,MSVC12(VS2013 RTM)认为第二个断言失败。
编辑有关信息:
is_trivially_copyable<litmus>
在MSVC上返回true-ness。对于许多不严格要求实际POD的情况,这可能很有用。
答案 0 :(得分:8)
GCC和Clang;该课程是POD。
这取决于完全你的意思是“make MSVC将该类视为pod”。如果你的意思是编译器内部,那么没有。但是,您可以(在实践中)专门研究litmus
:
namespace std {
template <>
struct is_pod<litmus> : std::true_type
{};
}
请注意,严格遵循标准,这会给出未定义的行为(感谢@ R.MartinhoFernandes指出这一点)。但是,作为特定于编译器的解决方法,我希望它能够正常工作。使用不受任何保证。