我寫了下面的代碼,試圖檢測一個類型是否有靜態成員變量。不幸的是,它總是返回變量不存在。sfinae檢查靜態成員使用decltype
有人能告訴我我要去哪裏嗎?我正在使用g ++ 4.7.1。
#include <iostream>
#include <utility>
#include <type_traits>
using namespace std;
template <class T>
class has_is_baz
{
template<class U,
typename std::enable_if<std::is_same<bool, decltype(U::is_baz)>::value>::type...>
static std::true_type check(int);
template <class>
static std::false_type check(...);
public:
static constexpr bool value = decltype(check<T>(0))::value;
};
struct foo { };
struct bar
{
static constexpr bool is_baz = true;
};
int main()
{
cout << has_is_baz<foo>::value << '\n';
cout << has_is_baz<bar>::value << '\n';
}
這並不要求'U :: is_baz'是靜態的。一個'struct A {bool is_baz; };'也會工作。 – 2012-08-14 21:50:34
@ JohannesSchaub-litb你是對的。它現在看起來很有效。 – mfontanini 2012-08-14 22:19:32