12345678910111213141516171819202122232425262728293031323334353637 |
- // (C) Copyright Mathias Gaunard 2009.
- // Use, modification and distribution are subject to the
- // Boost Software License, Version 1.0. (See accompanying file
- // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- // See http://www.boost.org/libs/config for the most recent version.
- // MACRO: BOOST_NO_SFINAE_EXPR
- // TITLE: SFINAE for expressions
- // DESCRIPTION: SFINAE for expressions not supported.
- namespace boost_no_sfinae_expr
- {
- template<typename T>
- struct has_foo
- {
- typedef char NotFound;
- struct Found { char x[2]; };
-
- template<int> struct dummy {};
-
- template<class X> static Found test(dummy< sizeof((*(X*)0).foo(), 0) >*);
- template<class X> static NotFound test( ... );
-
- static const bool value = (sizeof(Found) == sizeof(test<T>(0)));
- };
- struct test1 {};
- struct test2 { void foo(); };
- int test()
- {
- return has_foo<test1>::value || !has_foo<test2>::value;
- }
- } // namespace boost_no_sfinae_expr
|