111
|
1 // Origin: PR c++/46162
|
|
2
|
|
3 struct small_type { char dummy; };
|
|
4 struct large_type { char dummy[2]; };
|
|
5
|
|
6 template<class T>
|
|
7 struct has_foo_member_variable
|
|
8 {
|
|
9 template<int T::*> struct tester;
|
|
10 template<class U> static small_type has_foo(tester<&U::foo> *);
|
|
11 template<class U> static large_type has_foo(...);
|
|
12 static const bool value = (sizeof(has_foo<T>(0)) == sizeof(small_type));
|
|
13 };
|
|
14
|
|
15 struct A
|
|
16 {
|
|
17 static int foo()
|
|
18 {
|
|
19 return 0;
|
|
20 }
|
|
21 };
|
|
22
|
|
23 struct B
|
|
24 {
|
|
25 static int foo;
|
|
26 };
|
|
27
|
|
28 void
|
|
29 bar()
|
|
30 {
|
|
31 bool b = has_foo_member_variable<A>::value;
|
|
32 }
|
|
33
|