hof/test/static_def/static_def.hpp
2018-02-16 00:02:40 -06:00

62 lines
1.6 KiB
C++

/*=============================================================================
Copyright (c) 2017 Paul Fultz II
static_def.hpp
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)
==============================================================================*/
#ifndef GUARD_STATIC_DEF
#define GUARD_STATIC_DEF
#include <boost/hof/function.hpp>
#include <boost/hof/lambda.hpp>
// MSVC seems to not support unique addressing at all
#if defined (_MSC_VER)
#define BOOST_HOF_HAS_UNIQUE_STATIC_VAR 0
#define BOOST_HOF_HAS_UNIQUE_STATIC_LAMBDA_FUNCTION_ADDR 0
// Gcc 4.6 only supports unique addressing for non-lambdas
#elif defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
#define BOOST_HOF_HAS_UNIQUE_STATIC_VAR 1
#define BOOST_HOF_HAS_UNIQUE_STATIC_LAMBDA_FUNCTION_ADDR 0
#else
#define BOOST_HOF_HAS_UNIQUE_STATIC_VAR 1
#define BOOST_HOF_HAS_UNIQUE_STATIC_LAMBDA_FUNCTION_ADDR 1
#endif
namespace fit_test {
BOOST_HOF_STATIC_LAMBDA_FUNCTION(fit_sum_lambda) = [](int x, int y)
{
return x + y;
};
struct fit_sum_f
{
constexpr int operator()(int x, int y) const
{
return x + y;
}
};
BOOST_HOF_STATIC_LAMBDA_FUNCTION(fit_sum_fo) = fit_sum_f();
BOOST_HOF_STATIC_FUNCTION(fit_sum_constexpr_fo) = fit_sum_f();
BOOST_HOF_DECLARE_STATIC_VAR(fit_sum_var, fit_sum_f);
// BOOST_HOF_STATIC_FUNCTION(fit_sum) = [](auto x, auto y)
// {
// return x + y;
// };
template<class T>
T fit_sum(T x, T y)
{
return x + y;
};
}
#endif