SFINAE在C++中禁用带指针的POD结构

我正在寻找解决方案,以禁止使用作为模板参数结构是POD (或说可复制),但有指针。我要把它们传到网络上。例如。

// good
struct S1 {
    int x;
    S1() : x( 42 ) {} // I know that it's not a POD, but I know, that I can send S1 over network
};
// bad
struct S2 {
    int *x;
};

template<typename POD>
class ToNetwork {
    //static_assert( std::is_trivially_copyable< POD >::value, "Type must be POD" );
    static_assert( std::is_standard_layout< POD >::value, "Type must be POD" );
    POD m_payload;
};
ToNetwork< S1 > s1;
ToNetwork< S2 > s2; // should fail, but not((

is_trivially_copyable或is_standard_layout都认为这两种结构都很好。

转载请注明出处:http://www.0730huitian.com/article/20230526/1523103.html