1
2 // Copyright 2012 Daniel James.
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #include <boost/static_assert.hpp>
7 #include <boost/type_traits/is_same.hpp>
8 #include <boost/type_traits/is_convertible.hpp>
9 #include <cmath>
10
11 namespace test
12 {
13 template <class T1>
14 struct check_return_type
15 {
16 template <class T2>
equalstest::check_return_type17 static void equals(T2)
18 {
19 BOOST_STATIC_ASSERT((boost::is_same<T1, T2>::value));
20 }
21
22 template <class T2>
equals_reftest::check_return_type23 static void equals_ref(T2&)
24 {
25 BOOST_STATIC_ASSERT((boost::is_same<T1, T2>::value));
26 }
27
28 template <class T2>
convertibletest::check_return_type29 static void convertible(T2)
30 {
31 BOOST_STATIC_ASSERT((boost::is_convertible<T2, T1>::value));
32 }
33 };
34 }
35
main()36 int main() {
37 float f = 0;
38 double d = 0;
39 long double l = 0;
40
41 test::check_return_type<float>::equals(std::ldexp(f, 0));
42 test::check_return_type<double>::equals(std::ldexp(d, 0));
43 test::check_return_type<long double>::equals(std::ldexp(l, 0));
44
45 int dummy = 0;
46
47 test::check_return_type<float>::equals(std::frexp(f, &dummy));
48 test::check_return_type<double>::equals(std::frexp(d, &dummy));
49 test::check_return_type<long double>::equals(std::frexp(l, &dummy));
50
51 #if BOOST_HASH_USE_FPCLASSIFY
52
53 int (*fpc1)(float) = std::fpclassify;
54 int (*fpc2)(double) = std::fpclassify;
55 int (*fpc3)(long double) = std::fpclassify;
56
57 #endif
58 }
59