/usr/include/boost/spirit/home/x3/support/traits
Edit: /usr/include/boost/spirit/home/x3/support/traits/attribute_of_binary.hpp (2627B)
/*=============================================================================
Copyright (c) 2020 Nikita Kniazev
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_SPIRIT_X3_SUPPORT_TRAITS_ATTRIBUTE_OF_BINARY
#define BOOST_SPIRIT_X3_SUPPORT_TRAITS_ATTRIBUTE_OF_BINARY
#include
#include
#include
namespace boost { namespace spirit { namespace x3 { namespace detail
{
template
struct type_sequence
{
using type = type_sequence;
static const int size = sizeof...(T);
template
using append = type_sequence;
template
using prepend = type_sequence;
template
using extend = typename U::template prepend;
template class U>
using transfer_to = U;
};
template
struct types_of_binary_init : type_sequence {};
template <>
struct types_of_binary_init : type_sequence<> {};
template <>
struct types_of_binary_init : type_sequence<> {};
template class B, typename P, typename C>
struct get_types_of_binary
: types_of_binary_init::type> {};
template class B, typename L, typename R, typename C>
struct get_types_of_binary, C>
: get_types_of_binary::template extend> {};
template class A, typename T, int = T::size>
struct type_sequence_to_attribute { using type = typename T::template transfer_to; };
template class A, typename T>
struct type_sequence_to_attribute : T::template transfer_to {};
template class A, typename T>
struct type_sequence_to_attribute { using type = unused_type; };
template class A, template class B,
typename L, typename R, typename C>
using attribute_of_binary = type_sequence_to_attribute, C>::type>;
}}}}
#endif