小编Ram*_*nda的帖子

使用元编程的私有成员存在测试,GCC vs clang,哪个是对的?

这更像是一个c ++标准问题.请考虑以下代码:

template <typename T>
class has_Data
{
   typedef char one;
   typedef long two;

   template <typename C> static one test( typeof(&C::Data) ) ;
   template <typename C> static two test(...);

public:
   enum { value = sizeof(test<T>(0)) == sizeof(char) };
};

class MyClass {
private:
   struct Data {
   };
};


void function(bool val = has_Data<MyClass>::value) {}
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于 gcc (GCC) 4.4.3

然而 clang version 3.3 (2545b1d99942080bac4a74cda92c620123d0d6e9) (2ff97832e593926ea8dbdd5fc5bcf367475638a9)

它给出了这个错误:

test_private_data.cpp:7:54: error: 'Data' is a private member of 'MyClass'
   template <typename C> static one test( …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang

5
推荐指数
1
解决办法
303
查看次数

标签 统计

c++ ×1

clang ×1

gcc ×1