以下を考えると
#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であることに同意します。
- clang++ バージョン 3.5 (トランク 198621) http://coliru.stacked-crooked.com/a/7add7a2fe58a7e38
- g++ 4.8.1 http://coliru.stacked-crooked.com/a/74cfe97f06c8c128
ただし、MSVC12 (VS2013 RTM) は、2 番目のアサートが失敗することを維持します。
- 誰が正しいですか?
- MSVC にクラスをポッドとして扱わせるためのトリックはありますか?
EDIT参考までに:
is_trivially_copyable<litmus>
MSVC で true-ness を返します。これは、実際の POD らしさが厳密に必要とされない多くの場合に役立ちます。