1 /* 2 * Created by Martin on 08/02/2017. 3 * 4 * Distributed under the Boost Software License, Version 1.0. (See accompanying 5 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 */ 7 #ifndef TWOBLUECUBES_CATCH_TYPE_TRAITS_HPP_INCLUDED 8 #define TWOBLUECUBES_CATCH_TYPE_TRAITS_HPP_INCLUDED 9 10 #if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) 11 #include <type_traits> 12 #endif 13 14 15 namespace Catch { 16 17 #if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) 18 19 template <typename T> 20 using add_lvalue_reference = std::add_lvalue_reference<T>; 21 22 template <typename T> 23 using add_const = std::add_const<T>; 24 25 #else 26 27 template <typename T> 28 struct add_const { 29 typedef const T type; 30 }; 31 32 template <typename T> 33 struct add_lvalue_reference { 34 typedef T& type; 35 }; 36 template <typename T> 37 struct add_lvalue_reference<T&> { 38 typedef T& type; 39 }; 40 // No && overload, because that is C++11, in which case we have 41 // proper type_traits implementation from the standard library 42 43 #endif 44 45 } 46 47 #endif // TWOBLUECUBES_CATCH_TYPE_TRAITS_HPP_INCLUDED 48