forked from boostorg/core
move enable_if tests into their own subdirectory
[SVN r25649]
This commit is contained in:
committed by
Peter Dimov
parent
24bb363cf1
commit
503cd251c2
33
enable_if/test/Jamfile
Normal file
33
enable_if/test/Jamfile
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Copyright David Abrahams 2003.
|
||||||
|
# Distributed under 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)
|
||||||
|
|
||||||
|
# For more information, see http://www.boost.org/
|
||||||
|
|
||||||
|
subproject libs/utility/enable_if/test ;
|
||||||
|
|
||||||
|
# bring in rules for testing
|
||||||
|
import testing ;
|
||||||
|
|
||||||
|
# Make tests run by default.
|
||||||
|
DEPENDS all : test ;
|
||||||
|
|
||||||
|
{
|
||||||
|
local test_monitor = <lib>@boost/libs/test/build/boost_test_exec_monitor ;
|
||||||
|
|
||||||
|
# look in BOOST_ROOT for sources first, just in this Jamfile
|
||||||
|
local SEARCH_SOURCE = $(BOOST_ROOT) $(SEARCH_SOURCE) ;
|
||||||
|
|
||||||
|
test-suite utility/enable_if
|
||||||
|
:
|
||||||
|
[ run libs/utility/enable_if/test/constructors.cpp $(test_monitor) ]
|
||||||
|
[ run libs/utility/enable_if/test/dummy_arg_disambiguation.cpp $(test_monitor) ]
|
||||||
|
[ run libs/utility/enable_if/test/lazy.cpp $(test_monitor) ]
|
||||||
|
[ run libs/utility/enable_if/test/lazy_test.cpp $(test_monitor) ]
|
||||||
|
[ run libs/utility/enable_if/test/member_templates.cpp $(test_monitor) ]
|
||||||
|
[ run libs/utility/enable_if/test/namespace_disambiguation.cpp $(test_monitor) ]
|
||||||
|
[ run libs/utility/enable_if/test/no_disambiguation.cpp $(test_monitor) ]
|
||||||
|
[ run libs/utility/enable_if/test/partial_specializations.cpp $(test_monitor) ]
|
||||||
|
;
|
||||||
|
}
|
||||||
62
enable_if/test/constructors.cpp
Normal file
62
enable_if/test/constructors.cpp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits.hpp>
|
||||||
|
|
||||||
|
using boost::enable_if;
|
||||||
|
using boost::disable_if;
|
||||||
|
using boost::is_arithmetic;
|
||||||
|
|
||||||
|
struct container {
|
||||||
|
bool my_value;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
container(const T&, const typename enable_if<is_arithmetic<T>, T>::type * = 0):
|
||||||
|
my_value(true) {}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
container(const T&, const typename disable_if<is_arithmetic<T>, T>::type * = 0):
|
||||||
|
my_value(false) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// example from Howard Hinnant (tests enable_if template members of a templated class)
|
||||||
|
template <class charT>
|
||||||
|
struct xstring
|
||||||
|
{
|
||||||
|
template <class It>
|
||||||
|
xstring(It begin, It end, typename
|
||||||
|
disable_if<is_arithmetic<It> >::type* = 0)
|
||||||
|
: data(end-begin) {}
|
||||||
|
|
||||||
|
int data;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
|
||||||
|
BOOST_CHECK(container(1).my_value);
|
||||||
|
BOOST_CHECK(container(1.0).my_value);
|
||||||
|
|
||||||
|
BOOST_CHECK(!container("1").my_value);
|
||||||
|
BOOST_CHECK(!container(static_cast<void*>(0)).my_value);
|
||||||
|
|
||||||
|
char sa[] = "123456";
|
||||||
|
BOOST_CHECK(xstring<char>(sa, sa+6).data == 6);
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
46
enable_if/test/dummy_arg_disambiguation.cpp
Normal file
46
enable_if/test/dummy_arg_disambiguation.cpp
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/is_arithmetic.hpp>
|
||||||
|
|
||||||
|
using boost::enable_if;
|
||||||
|
using boost::disable_if;
|
||||||
|
using boost::is_arithmetic;
|
||||||
|
|
||||||
|
template <int N> struct dummy {
|
||||||
|
dummy(int) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename enable_if<is_arithmetic<T>, bool>::type
|
||||||
|
arithmetic_object(T t, dummy<0> = 0) { return true; }
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename disable_if<is_arithmetic<T>, bool>::type
|
||||||
|
arithmetic_object(T t, dummy<1> = 0) { return false; }
|
||||||
|
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
|
||||||
|
BOOST_CHECK(arithmetic_object(1));
|
||||||
|
BOOST_CHECK(arithmetic_object(1.0));
|
||||||
|
|
||||||
|
BOOST_CHECK(!arithmetic_object("1"));
|
||||||
|
BOOST_CHECK(!arithmetic_object(static_cast<void*>(0)));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
82
enable_if/test/lazy.cpp
Normal file
82
enable_if/test/lazy.cpp
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/is_same.hpp>
|
||||||
|
|
||||||
|
using boost::enable_if_c;
|
||||||
|
using boost::lazy_enable_if_c;
|
||||||
|
|
||||||
|
// This class provides a reduced example of a traits class for
|
||||||
|
// computing the result of multiplying two types. The member typedef
|
||||||
|
// 'type' in this traits class defines the return type of this
|
||||||
|
// operator. The return type member is invalid unless both arguments
|
||||||
|
// for mult_traits are values that mult_traits expects (ints in this
|
||||||
|
// case). This kind of situation may arise if a traits class only
|
||||||
|
// makes sense for some set of types, not all C++ types.
|
||||||
|
|
||||||
|
template <class T> struct is_int {
|
||||||
|
BOOST_STATIC_CONSTANT(bool, value = (boost::is_same<T, int>::value));
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T, class U>
|
||||||
|
struct mult_traits {
|
||||||
|
typedef typename T::does_not_exist type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct mult_traits<int, int> {
|
||||||
|
typedef int type;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Next, a forwarding function mult() is defined. It is enabled only
|
||||||
|
// when both arguments are of type int. The first version, using
|
||||||
|
// non-lazy enable_if_c does not work.
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
template <class T, class U>
|
||||||
|
typename enable_if_c<
|
||||||
|
is_int<T>::value && is_int<U>::value,
|
||||||
|
typename mult_traits<T, U>::type
|
||||||
|
>::type
|
||||||
|
mult(const T& x, const U& y) {return x * y;}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// A correct version uses lazy_enable_if_c.
|
||||||
|
// This template removes compiler errors from invalid code used as an
|
||||||
|
// argument to enable_if_c.
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
template <class T, class U>
|
||||||
|
typename lazy_enable_if_c<
|
||||||
|
is_int<T>::value && is_int<U>::value,
|
||||||
|
mult_traits<T, U>
|
||||||
|
>::type
|
||||||
|
mult(const T& x, const U& y) {return x * y;}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
double mult(int i, double d) { return (double)i * d; }
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_CHECK(mult(1, 2) == 2);
|
||||||
|
|
||||||
|
BOOST_CHECK(mult(1, 3.0) == 3.0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
100
enable_if/test/lazy_test.cpp
Normal file
100
enable_if/test/lazy_test.cpp
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
// Testing all variations of lazy_enable_if.
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
#include <boost/mpl/not.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/is_same.hpp>
|
||||||
|
|
||||||
|
using boost::lazy_enable_if;
|
||||||
|
using boost::lazy_disable_if;
|
||||||
|
|
||||||
|
using boost::lazy_enable_if_c;
|
||||||
|
using boost::lazy_disable_if_c;
|
||||||
|
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct is_int_or_double {
|
||||||
|
BOOST_STATIC_CONSTANT(bool,
|
||||||
|
value = (boost::is_same<T, int>::value ||
|
||||||
|
boost::is_same<T, double>::value));
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct some_traits {
|
||||||
|
typedef typename T::does_not_exist type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct some_traits<int> {
|
||||||
|
typedef bool type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct some_traits<double> {
|
||||||
|
typedef bool type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct make_bool {
|
||||||
|
typedef bool type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_bool<int> {};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct make_bool<double> {};
|
||||||
|
|
||||||
|
namespace A {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename lazy_enable_if<is_int_or_double<T>, some_traits<T> >::type
|
||||||
|
foo(T t) { return true; }
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename lazy_enable_if_c<is_int_or_double<T>::value, some_traits<T> >::type
|
||||||
|
foo2(T t) { return true; }
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace B {
|
||||||
|
template<class T>
|
||||||
|
typename lazy_disable_if<is_int_or_double<T>, make_bool<T> >::type
|
||||||
|
foo(T t) { return false; }
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename lazy_disable_if_c<is_int_or_double<T>::value, make_bool<T> >::type
|
||||||
|
foo2(T t) { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
using namespace A;
|
||||||
|
using namespace B;
|
||||||
|
BOOST_CHECK(foo(1));
|
||||||
|
BOOST_CHECK(foo(1.0));
|
||||||
|
|
||||||
|
BOOST_CHECK(!foo("1"));
|
||||||
|
BOOST_CHECK(!foo(static_cast<void*>(0)));
|
||||||
|
|
||||||
|
BOOST_CHECK(foo2(1));
|
||||||
|
BOOST_CHECK(foo2(1.0));
|
||||||
|
|
||||||
|
BOOST_CHECK(!foo2("1"));
|
||||||
|
BOOST_CHECK(!foo2(static_cast<void*>(0)));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
43
enable_if/test/member_templates.cpp
Normal file
43
enable_if/test/member_templates.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/is_arithmetic.hpp>
|
||||||
|
|
||||||
|
using boost::enable_if;
|
||||||
|
using boost::disable_if;
|
||||||
|
using boost::is_arithmetic;
|
||||||
|
|
||||||
|
struct container {
|
||||||
|
template <class T>
|
||||||
|
typename enable_if<is_arithmetic<T>, bool>::type
|
||||||
|
arithmetic_object(const T&, const int* /* disambiguate */ = 0) {return true;}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
typename disable_if<is_arithmetic<T>, bool>::type
|
||||||
|
arithmetic_object(const T&) {return false;}
|
||||||
|
};
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
|
||||||
|
BOOST_CHECK(container().arithmetic_object(1));
|
||||||
|
BOOST_CHECK(container().arithmetic_object(1.0));
|
||||||
|
|
||||||
|
BOOST_CHECK(!container().arithmetic_object("1"));
|
||||||
|
BOOST_CHECK(!container().arithmetic_object(static_cast<void*>(0)));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
47
enable_if/test/namespace_disambiguation.cpp
Normal file
47
enable_if/test/namespace_disambiguation.cpp
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
#include <boost/mpl/not.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/is_arithmetic.hpp>
|
||||||
|
|
||||||
|
using boost::enable_if;
|
||||||
|
using boost::mpl::not_;
|
||||||
|
using boost::is_arithmetic;
|
||||||
|
|
||||||
|
namespace A {
|
||||||
|
template<class T>
|
||||||
|
typename enable_if<is_arithmetic<T>, bool>::type
|
||||||
|
arithmetic_object(T t) { return true; }
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace B {
|
||||||
|
template<class T>
|
||||||
|
typename enable_if<not_<is_arithmetic<T> >, bool>::type
|
||||||
|
arithmetic_object(T t) { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
using namespace A;
|
||||||
|
using namespace B;
|
||||||
|
BOOST_CHECK(arithmetic_object(1));
|
||||||
|
BOOST_CHECK(arithmetic_object(1.0));
|
||||||
|
|
||||||
|
BOOST_CHECK(!arithmetic_object("1"));
|
||||||
|
BOOST_CHECK(!arithmetic_object(static_cast<void*>(0)));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
43
enable_if/test/no_disambiguation.cpp
Normal file
43
enable_if/test/no_disambiguation.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
#include <boost/mpl/not.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/is_arithmetic.hpp>
|
||||||
|
|
||||||
|
using boost::mpl::not_;
|
||||||
|
using boost::enable_if;
|
||||||
|
using boost::is_arithmetic;
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename enable_if<is_arithmetic<T>, bool>::type
|
||||||
|
arithmetic_object(T t) { return true; }
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename enable_if<not_<is_arithmetic<T> >, bool>::type
|
||||||
|
arithmetic_object(T t) { return false; }
|
||||||
|
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
|
||||||
|
BOOST_CHECK(arithmetic_object(1));
|
||||||
|
BOOST_CHECK(arithmetic_object(1.0));
|
||||||
|
|
||||||
|
BOOST_CHECK(!arithmetic_object("1"));
|
||||||
|
BOOST_CHECK(!arithmetic_object(static_cast<void*>(0)));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
67
enable_if/test/partial_specializations.cpp
Normal file
67
enable_if/test/partial_specializations.cpp
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
// Boost enable_if library
|
||||||
|
|
||||||
|
// Copyright 2003 <20> The Trustees of Indiana University.
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
|
||||||
|
// Authors: Jaakko J<>rvi (jajarvi at osl.iu.edu)
|
||||||
|
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
||||||
|
// Andrew Lumsdaine (lums at osl.iu.edu)
|
||||||
|
|
||||||
|
#include <boost/test/minimal.hpp>
|
||||||
|
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/is_arithmetic.hpp>
|
||||||
|
|
||||||
|
using boost::enable_if_c;
|
||||||
|
using boost::disable_if_c;
|
||||||
|
using boost::enable_if;
|
||||||
|
using boost::disable_if;
|
||||||
|
using boost::is_arithmetic;
|
||||||
|
|
||||||
|
template <class T, class Enable = void>
|
||||||
|
struct tester;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct tester<T, typename enable_if_c<is_arithmetic<T>::value>::type> {
|
||||||
|
BOOST_STATIC_CONSTANT(bool, value = true);
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct tester<T, typename disable_if_c<is_arithmetic<T>::value>::type> {
|
||||||
|
BOOST_STATIC_CONSTANT(bool, value = false);
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T, class Enable = void>
|
||||||
|
struct tester2;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct tester2<T, typename enable_if<is_arithmetic<T> >::type> {
|
||||||
|
BOOST_STATIC_CONSTANT(bool, value = true);
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
struct tester2<T, typename disable_if<is_arithmetic<T> >::type> {
|
||||||
|
BOOST_STATIC_CONSTANT(bool, value = false);
|
||||||
|
};
|
||||||
|
|
||||||
|
int test_main(int, char*[])
|
||||||
|
{
|
||||||
|
|
||||||
|
BOOST_CHECK(tester<int>::value);
|
||||||
|
BOOST_CHECK(tester<double>::value);
|
||||||
|
|
||||||
|
BOOST_CHECK(!tester<char*>::value);
|
||||||
|
BOOST_CHECK(!tester<void*>::value);
|
||||||
|
|
||||||
|
BOOST_CHECK(tester2<int>::value);
|
||||||
|
BOOST_CHECK(tester2<double>::value);
|
||||||
|
|
||||||
|
BOOST_CHECK(!tester2<char*>::value);
|
||||||
|
BOOST_CHECK(!tester2<void*>::value);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user