Ho scritto il codice seguente per provare a rilevare se un tipo ha una variabile membro statica. Sfortunatamente, sta sempre tornando che la variabile non esiste.controllo sfina per membro statico utilizzando decltype
Qualcuno potrebbe dirmi dove sto andando male? Sto usando 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';
}
Ciò non richiede che 'U :: is_baz' sia statico. Una 'struct A {bool is_baz; }; 'funzionerà altrettanto bene. –
@ JohannesSchaub-litb hai ragione. Sembra che funzioni ora. – mfontanini