diff options
Diffstat (limited to 'src/boost/libs/config/test/boost_no_sfinae.ipp')
-rw-r--r-- | src/boost/libs/config/test/boost_no_sfinae.ipp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/boost/libs/config/test/boost_no_sfinae.ipp b/src/boost/libs/config/test/boost_no_sfinae.ipp new file mode 100644 index 00000000..57dad282 --- /dev/null +++ b/src/boost/libs/config/test/boost_no_sfinae.ipp @@ -0,0 +1,68 @@ +// (C) Copyright Eric Friedman 2003. +// Some modifications by Jeremiah Willcock and Jaakko Jarvi. +// Use, modification, and distribution is 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) + +// MACRO: BOOST_NO_SFINAE +// TITLE: SFINAE (substitution failure is not an error) +// DESCRIPTION: SFINAE not supported. + + +namespace boost_no_sfinae { + +namespace f1_a { +template <typename T> +int f1(T*, float) +{ + return 0; +} +} using f1_a::f1; + +namespace f1_b { +template <typename T> +int f1(T*, int, typename T::int_* = 0) +{ + return 1; +} +} using f1_b::f1; + +namespace f2_a { +template <typename T> +int f2(T*, float) +{ + return 2; +} +} using f2_a::f2; + +namespace f2_b { +template <typename T> +typename T::int_ f2(T*, int) +{ + return 3; +} +} using f2_b::f2; + +struct test_t +{ + typedef int int_; +}; + +struct test2_t {}; + +int test() +{ + test_t* t = 0; + test2_t* t2 = 0; + bool correct = + (f1(t, 0) == 1) && + (f1(t2, 0) == 0) && + (f2(t, 0) == 3) && + (f2(t2, 0) == 2); + return !correct; +} + +} + + + |