1// Boost enable_if library
2
3// Copyright 2003 (c) The Trustees of Indiana University.
4
5// Use, modification, and distribution is subject to the Boost Software
6// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8
9// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
10// Jeremiah Willcock (jewillco at osl.iu.edu)
11// Andrew Lumsdaine (lums at osl.iu.edu)
12
13#include <boost/config.hpp>
14#include <boost/utility/enable_if.hpp>
15#include <boost/type_traits/is_arithmetic.hpp>
16#include <boost/core/lightweight_test.hpp>
17
18using boost::enable_if;
19using boost::is_arithmetic;
20
21template<class T> struct not_
22{
23 BOOST_STATIC_CONSTANT( bool, value = !T::value );
24};
25
26template<class T>
27typename enable_if<is_arithmetic<T>, bool>::type
28arithmetic_object(T /*t*/) { return true; }
29
30template<class T>
31typename enable_if<not_<is_arithmetic<T> >, bool>::type
32arithmetic_object(T /*t*/) { return false; }
33
34
35int main()
36{
37
38 BOOST_TEST(arithmetic_object(1));
39 BOOST_TEST(arithmetic_object(1.0));
40
41 BOOST_TEST(!arithmetic_object("1"));
42 BOOST_TEST(!arithmetic_object(static_cast<void*>(0)));
43
44 return boost::report_errors();
45}
46

source code of boost/libs/core/test/eif_no_disambiguation.cpp