📄 op_tags.hpp
字号:
///////////////////////////////////////////////////////////////////////////////
/// \file op_tags.hpp
/// Contains the tags for all the overloadable operators in C++, as well as
/// the base tags unary_tag, binary_tag and nary_tag, as well as the is_unary\<\>,
/// is_binary\<\> and is_nary\<\> predicates.
//
// Copyright 2004 Eric Niebler. 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_PROTO_OP_TAGS_HPP_EAN_04_01_2005
#define BOOST_PROTO_OP_TAGS_HPP_EAN_04_01_2005
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/xpressive/proto/proto_fwd.hpp>
namespace boost { namespace proto
{
///////////////////////////////////////////////////////////////////////////////
// Operator tags
struct unary_tag {};
struct binary_tag {};
struct nary_tag {}; // for operator()
struct noop_tag : unary_tag {};
struct unary_plus_tag : unary_tag {};
struct unary_minus_tag : unary_tag {};
struct unary_star_tag : unary_tag {};
struct complement_tag : unary_tag {};
struct address_of_tag : unary_tag {};
struct logical_not_tag : unary_tag {};
struct pre_inc_tag : unary_tag {};
struct pre_dec_tag : unary_tag {};
struct post_inc_tag : unary_tag {};
struct post_dec_tag : unary_tag {};
struct left_shift_tag : binary_tag {};
struct right_shift_tag : binary_tag {};
struct multiply_tag : binary_tag {};
struct divide_tag : binary_tag {};
struct modulus_tag : binary_tag {};
struct add_tag : binary_tag {};
struct subtract_tag : binary_tag {};
struct less_tag : binary_tag {};
struct greater_tag : binary_tag {};
struct less_equal_tag : binary_tag {};
struct greater_equal_tag : binary_tag {};
struct equal_tag : binary_tag {};
struct not_equal_tag : binary_tag {};
struct logical_or_tag : binary_tag {};
struct logical_and_tag : binary_tag {};
struct bitand_tag : binary_tag {};
struct bitor_tag : binary_tag {};
struct bitxor_tag : binary_tag {};
struct comma_tag : binary_tag {};
struct mem_ptr_tag : binary_tag {};
struct assign_tag : binary_tag {};
struct left_shift_assign_tag : binary_tag {};
struct right_shift_assign_tag : binary_tag {};
struct multiply_assign_tag : binary_tag {};
struct divide_assign_tag : binary_tag {};
struct modulus_assign_tag : binary_tag {};
struct add_assign_tag : binary_tag {};
struct subtract_assign_tag : binary_tag {};
struct bitand_assign_tag : binary_tag {};
struct bitor_assign_tag : binary_tag {};
struct bitxor_assign_tag : binary_tag {};
struct subscript_tag : binary_tag {};
struct function_tag : nary_tag {};
///////////////////////////////////////////////////////////////////////////////
// is_unary
template<typename Tag>
struct is_unary
: boost::is_base_and_derived<unary_tag, Tag>
{
};
///////////////////////////////////////////////////////////////////////////////
// is_binary
template<typename Tag>
struct is_binary
: boost::is_base_and_derived<binary_tag, Tag>
{
};
///////////////////////////////////////////////////////////////////////////////
// is_nary
template<typename Tag>
struct is_nary
: boost::is_base_and_derived<nary_tag, Tag>
{
};
}}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -