30 lines
859 B
C++
30 lines
859 B
C++
|
/*=============================================================================
|
||
|
Copyright (c) 2017 Paul Fultz II
|
||
|
implicit.cpp
|
||
|
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)
|
||
|
==============================================================================*/
|
||
|
#include <boost/hof/implicit.hpp>
|
||
|
|
||
|
template<class T>
|
||
|
struct auto_caster
|
||
|
{
|
||
|
template<class U>
|
||
|
T operator()(U x)
|
||
|
{
|
||
|
return T(x);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
boost::hof::implicit<auto_caster> auto_cast = {};
|
||
|
auto x = auto_cast(1.5);
|
||
|
(void)x;
|
||
|
// This is not possible in c++17 due to guaranteed copy elison
|
||
|
#if BOOST_HOF_HAS_STD_17 || (defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7)
|
||
|
static_assert(false, "Always fail");
|
||
|
#endif
|
||
|
}
|