75 lines
3.6 KiB
C++
75 lines
3.6 KiB
C++
|
// Copyright Cromwell D. Enage 2019.
|
||
|
// 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 BOOST_PARAMETER_PREPROCESSOR_NO_SPEC_HPP
|
||
|
#define BOOST_PARAMETER_PREPROCESSOR_NO_SPEC_HPP
|
||
|
|
||
|
#include <boost/parameter/aux_/preprocessor/impl/function_name.hpp>
|
||
|
#include <boost/parameter/aux_/preprocessor/impl/no_spec_overloads.hpp>
|
||
|
|
||
|
// Exapnds to a variadic function header that is enabled if and only if all
|
||
|
// its arguments are tagged arguments. All arguments are accessible via args
|
||
|
// and keywords only.
|
||
|
#define BOOST_PARAMETER_NO_SPEC_FUNCTION(result, name) \
|
||
|
BOOST_PARAMETER_NO_SPEC_FUNCTION_HEAD(result, name, 0) \
|
||
|
BOOST_PARAMETER_NO_SPEC_FUNCTION_IMPL_HEAD(name, 0); \
|
||
|
BOOST_PARAMETER_NO_SPEC_FUNCTION_OVERLOAD(name, name, 0, 0) \
|
||
|
BOOST_PARAMETER_NO_SPEC_FUNCTION_IMPL_HEAD(name, 0)
|
||
|
/**/
|
||
|
|
||
|
#include <boost/preprocessor/control/expr_if.hpp>
|
||
|
#include <boost/preprocessor/control/if.hpp>
|
||
|
|
||
|
// Helper macro for BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION,
|
||
|
// BOOST_PARAMETER_NO_SPEC_CONST_MEMBER_FUNCTION,
|
||
|
// BOOST_PARAMETER_NO_SPEC_FUNCTION_CALL_OPERATOR, and
|
||
|
// and BOOST_PARAMETER_NO_SPEC_CONST_FUNCTION_CALL_OPERATOR.
|
||
|
#define BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION_AUX(result, name, impl, c) \
|
||
|
BOOST_PARAMETER_NO_SPEC_FUNCTION_HEAD(result, impl, c) \
|
||
|
BOOST_PARAMETER_NO_SPEC_FUNCTION_OVERLOAD( \
|
||
|
name \
|
||
|
, impl \
|
||
|
, BOOST_PP_IF(BOOST_PARAMETER_MEMBER_FUNCTION_IS_STATIC(impl), 0, 1) \
|
||
|
, c \
|
||
|
) \
|
||
|
BOOST_PARAMETER_NO_SPEC_FUNCTION_IMPL_HEAD(impl, c) \
|
||
|
BOOST_PP_EXPR_IF(c, const)
|
||
|
/**/
|
||
|
|
||
|
// Exapnds to a variadic member function header that is enabled if and only if
|
||
|
// all its arguments are tagged arguments. All arguments are accessible via
|
||
|
// args and keywords only.
|
||
|
#define BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION(result, name) \
|
||
|
BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION_AUX(result, name, name, 0)
|
||
|
/**/
|
||
|
|
||
|
// Exapnds to a const-qualified variadic member function header that is
|
||
|
// enabled if and only if all its arguments are tagged arguments. All
|
||
|
// arguments are accessible via args and keywords only.
|
||
|
#define BOOST_PARAMETER_NO_SPEC_CONST_MEMBER_FUNCTION(result, name) \
|
||
|
BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION_AUX(result, name, name, 1)
|
||
|
/**/
|
||
|
|
||
|
// Exapnds to a variadic function call operator header that is enabled if and
|
||
|
// only if all its arguments are tagged arguments. All arguments are
|
||
|
// accessible via args and keywords only.
|
||
|
#define BOOST_PARAMETER_NO_SPEC_FUNCTION_CALL_OPERATOR(result) \
|
||
|
BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION_AUX( \
|
||
|
result, operator(), operator, 0 \
|
||
|
)
|
||
|
/**/
|
||
|
|
||
|
// Exapnds to a const-qualified variadic function call operator header that is
|
||
|
// enabled if and only if all its arguments are tagged arguments. All
|
||
|
// arguments are accessible via args and keywords only.
|
||
|
#define BOOST_PARAMETER_NO_SPEC_CONST_FUNCTION_CALL_OPERATOR(result) \
|
||
|
BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION_AUX( \
|
||
|
result, operator(), operator, 1 \
|
||
|
)
|
||
|
/**/
|
||
|
|
||
|
#endif // include guard
|
||
|
|