moved type, integral, template template params into separate files

[SVN r2478]
This commit is contained in:
Arkadiy Vertleyb
2005-02-04 03:14:19 +00:00
parent 634d010810
commit 9a74a20365
26 changed files with 344 additions and 207 deletions

View File

@@ -96,12 +96,16 @@ public:
catch(const runtime_error&)
{}
for (int i = nMin; i < nMax; ++i)
for (int i = nMin; i <= nMax; ++i)
{
m_out << "BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(" << name << ", " << i << ")" << endl;
if (i == nMin && i != nMax)
m_out << "#ifdef BOOST_TYPEOF_COMPLIANT" << endl;
if (i == nMax && i != nMin)
m_out << "#endif//BOOST_TYPEOF_COMPLIANT" << endl;
m_out << "BOOST_TYPEOF_REGISTER_TEMPLATE(" << name << ", " << i << ")" << endl;
}
m_out << "BOOST_TYPEOF_REGISTER_TEMPLATE(" << name << ", " << nMax << ")" << endl;
}
else if (what == "TYPE")
{

View File

@@ -0,0 +1,25 @@
// Copyright (C) 2005 Arkadiy Vertleyb
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_COMPLIANT_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
#define BOOST_TYPEOF_COMPLIANT_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
#include <boost/typeof/integral_template_param.hpp>
// INTEGRAL_PARAM "virtual functions" implementation
#define BOOST_TYPEOF_ENCODE_INTEGRAL_PARAM(This, n)\
typedef typename encode_integral<\
BOOST_PP_CAT(V, n),\
BOOST_TYPEOF_PARAM_GETTYPE(This),\
BOOST_PP_CAT(P, n)\
>::type BOOST_PP_CAT(V, BOOST_PP_INC(n));
#define BOOST_TYPEOF_DECODE_INTEGRAL_PARAM(This, n)\
typedef decode_integral<BOOST_TYPEOF_PARAM_GETTYPE(This), BOOST_PP_CAT(iter, n)> BOOST_PP_CAT(d, n);\
static const BOOST_TYPEOF_PARAM_GETTYPE(This) BOOST_PP_CAT(P, n) = BOOST_PP_CAT(d, n)::value;\
typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n));
#endif//BOOST_TYPEOF_COMPLIANT_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED

View File

@@ -8,38 +8,15 @@
#include <boost/typeof/compliant/encode_decode.hpp>
#include <boost/typeof/compliant/int_encoding.hpp>
#include <boost/typeof/register_integral.hpp>
#include <boost/typeof/compliant/register_template_template.hpp>
#include <boost/typeof/template_encoding.hpp>
#include <boost/typeof/compliant/type_template_param.hpp>
#include <boost/typeof/compliant/integral_template_param.hpp>
#include <boost/typeof/compliant/template_template_param.hpp>
//////////
// TYPE_PARAM "virtual functions" implementation
#define BOOST_TYPEOF_ENCODE_TYPE_PARAM(This, n)\
typedef typename encode_type<\
BOOST_PP_CAT(V, n),\
BOOST_PP_CAT(P, n)\
>::type BOOST_PP_CAT(V, BOOST_PP_INC(n));
#define BOOST_TYPEOF_DECODE_TYPE_PARAM(This, n)\
typedef decode_type< BOOST_PP_CAT(iter, n) > BOOST_PP_CAT(d, n);\
typedef typename BOOST_PP_CAT(d, n)::type BOOST_PP_CAT(P, n);\
typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n));
// INTEGRAL_PARAM "virtual functions" implementation
#define BOOST_TYPEOF_ENCODE_INTEGRAL_PARAM(This, n)\
typedef typename encode_integral<\
BOOST_PP_CAT(V, n),\
BOOST_TYPEOF_PARAM_GETTYPE(This),\
BOOST_PP_CAT(P, n)\
>::type BOOST_PP_CAT(V, BOOST_PP_INC(n));
#define BOOST_TYPEOF_DECODE_INTEGRAL_PARAM(This, n)\
typedef decode_integral<BOOST_TYPEOF_PARAM_GETTYPE(This), BOOST_PP_CAT(iter, n)> BOOST_PP_CAT(d, n);\
static const BOOST_TYPEOF_PARAM_GETTYPE(This) BOOST_PP_CAT(P, n) = BOOST_PP_CAT(d, n)::value;\
typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n));
// "function objects"
#define BOOST_TYPEOF_REGISTER_TEMPLATE_ENCODE_PARAM(r, data, n, elem)\
@@ -63,6 +40,7 @@
#define BOOST_TYPEOF_REGISTER_TEMPLATE_X_IMPL(Name, Params, ID)\
BOOST_TYPEOF_REGISTER_ARGUMENTS_FOR_TT_ENCODING(Name, Params, ID)\
template<class V\
BOOST_TYPEOF_SEQ_ENUM_TRAILING(Params,BOOST_TYPEOF_REGISTER_TEMPLATE_PARAM_PAIR)\
>\
@@ -92,13 +70,6 @@
#define BOOST_TYPEOF_REGISTER_TEMPLATE_X(Name, Params)\
namespace boost{namespace type_of{namespace{\
BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE_IMPL(Name,Params,BOOST_TYPEOF_UNIQUE_ID())\
BOOST_TYPEOF_REGISTER_TEMPLATE_X_IMPL(Name, Params, BOOST_TYPEOF_UNIQUE_ID())\
}}}
#define BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS_X(Name, Params)\
namespace boost{namespace type_of{namespace{\
BOOST_TYPEOF_REGISTER_ARGUMENTS_FOR_TT_ENCODING(Name,Params,BOOST_TYPEOF_UNIQUE_ID())\
BOOST_TYPEOF_REGISTER_TEMPLATE_X_IMPL(Name, Params, BOOST_TYPEOF_UNIQUE_ID())\
}}}

View File

@@ -2,8 +2,8 @@
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_COMPLIANT_REGISTER_TEMPLATE_TEMPLATE_HPP_INCLUDED
#define BOOST_TYPEOF_COMPLIANT_REGISTER_TEMPLATE_TEMPLATE_HPP_INCLUDED
#ifndef BOOST_TYPEOF_COMPLIANT_TEMPLATE_TEMPLATE_PARAM_HPP_INCLUDED
#define BOOST_TYPEOF_COMPLIANT_TEMPLATE_TEMPLATE_PARAM_HPP_INCLUDED
#include <boost/preprocessor/comparison/equal.hpp>
#include <boost/preprocessor/comparison/not_equal.hpp>
@@ -125,10 +125,16 @@ namespace boost{namespace type_of {namespace {
//Define template template arguments
#define BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE_IMPL(Name,Params,ID)\
BOOST_PP_IF(BOOST_TYPEOF_SUPPORT_TEMPLATE_TEMPLATE_ENCODING(Params),\
BOOST_TYPEOF_REGISTER_THIS_FOR_TT_ENCODING,\
BOOST_TYPEOF_REGISTER_ARGUMENTS_FOR_TT_ENCODING)(Name,Params,ID)
BOOST_TYPEOF_REGISTER_THIS_FOR_TT_ENCODING(Name,Params,ID)
//BOOST_PP_IF(BOOST_TYPEOF_SUPPORT_TEMPLATE_TEMPLATE_ENCODING(Params),\
// BOOST_TYPEOF_REGISTER_THIS_FOR_TT_ENCODING,\
// BOOST_TYPEOF_REGISTER_ARGUMENTS_FOR_TT_ENCODING)(Name,Params,ID)
#define BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE(Name,Params)\
namespace boost{namespace type_of{namespace{\
BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE_IMPL(Name,Params,BOOST_TYPEOF_UNIQUE_ID())\
}}}
//Define template template params
#define BOOST_TYPEOF_REGISTER_THIS_FOR_TT_ENCODING(Name,Params,ID)\
@@ -187,8 +193,7 @@ namespace boost{namespace type_of {namespace {
#define BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE_TYPE(Name,Params,ID)\
typename BOOST_TYPEOF_TEMPLATE_TEMPLATE_NAME_IMPL(decode_template,Params)<boost::mpl::size_t<ID> BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SEQ_SIZE(Params), P) >::type
#define BOOST_TYPEOF_REGISTER_COMPACT_TEMPLATE_PARAM_PAIR(z,n,elem)\
BOOST_TYPEOF_COMPACT_TYPE(BOOST_TYPEOF_MAKE_OBJ(elem)) BOOST_PP_CAT(P, n)
#endif //BOOST_TYPEOF_COMPLIANT_REGISTER_TEMPLATE_TEMPLATE_HPP_INCLUDED
#endif //BOOST_TYPEOF_COMPLIANT_TEMPLATE_TEMPLATE_PARAM_HPP_INCLUDED

View File

@@ -0,0 +1,25 @@
// Copyright (C) 2005 Arkadiy Vertleyb
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_COMPLIANT_TYPE_TEMPLATE_PARAM_HPP_INCLUDED
#define BOOST_TYPEOF_COMPLIANT_TYPE_TEMPLATE_PARAM_HPP_INCLUDED
#include <boost/typeof/type_template_param.hpp>
// TYPE_PARAM "virtual functions" implementation
#define BOOST_TYPEOF_ENCODE_TYPE_PARAM(This, n)\
typedef typename encode_type<\
BOOST_PP_CAT(V, n),\
BOOST_PP_CAT(P, n)\
>::type BOOST_PP_CAT(V, BOOST_PP_INC(n));
#define BOOST_TYPEOF_DECODE_TYPE_PARAM(This, n)\
typedef decode_type< BOOST_PP_CAT(iter, n) > BOOST_PP_CAT(d, n);\
typedef typename BOOST_PP_CAT(d, n)::type BOOST_PP_CAT(P, n);\
typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n));
#define BOOST_TYPEOF_EXPAND_TYPE_PARAM(Param) BOOST_TYPEOF_PARAM_GETTYPE(Param)
#endif//BOOST_TYPEOF_COMPLIANT_TYPE_TEMPLATE_PARAM_HPP_INCLUDED

View File

@@ -1,26 +1,9 @@
// Copyright (C) 2004 Arkadiy Vertleyb
// Copyright (C) 2005 Peder Holt
// Copyright (C) 2005 Arkadiy Vertleyb
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_REGISTER_INTEGRAL_HPP_INCLUDED
#define BOOST_TYPEOF_REGISTER_INTEGRAL_HPP_INCLUDED
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/seq.hpp>
#include <boost/preprocessor/repetition/enum_trailing.hpp>
// The template parameter description, entered by the user,
// is converted into a polymorphic "object"
// that is used to generate the code responsible for
// encoding/decoding the parameter, etc.
// See also compliant/template_encoding.hpp and
// vintage/template_encoding.hpp.
#define BOOST_TYPEOF_MAKE_OBJ(elem) BOOST_PP_SEQ_CAT(\
(BOOST_TYPEOF_MAKE_OBJ_) BOOST_TYPEOF_TO_SEQ(elem))
#define BOOST_TYPEOF_TO_SEQ(tokens) BOOST_TYPEOF_ ## tokens ## _BOOST_TYPEOF
#ifndef BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
#define BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
#define BOOST_TYPEOF_unsigned (unsigned)
#define BOOST_TYPEOF_signed (signed)
@@ -35,13 +18,9 @@
#define BOOST_TYPEOF_int_BOOST_TYPEOF (int)
#define BOOST_TYPEOF_long_BOOST_TYPEOF (long)
#define BOOST_TYPEOF_bool_BOOST_TYPEOF (bool)
#define BOOST_TYPEOF_class_BOOST_TYPEOF (class)
#define BOOST_TYPEOF_typename_BOOST_TYPEOF (typename)
#define BOOST_TYPEOF_unsigned_BOOST_TYPEOF (unsigned)
#define BOOST_TYPEOF_size_t_BOOST_TYPEOF (size_t)
#define BOOST_TYPEOF_MAKE_OBJ_class BOOST_TYPEOF_TYPE_PARAM
#define BOOST_TYPEOF_MAKE_OBJ_typename BOOST_TYPEOF_TYPE_PARAM
#define BOOST_TYPEOF_MAKE_OBJ_char BOOST_TYPEOF_INTEGRAL_PARAM(char,char)
#define BOOST_TYPEOF_MAKE_OBJ_short BOOST_TYPEOF_INTEGRAL_PARAM(short,short)
#define BOOST_TYPEOF_MAKE_OBJ_int BOOST_TYPEOF_INTEGRAL_PARAM(int,int)
@@ -63,27 +42,6 @@
#define BOOST_TYPEOF_EAT_BOOST_TYPEOF
#define BOOST_TYPEOF_integral(X) (integral(X))
// "interface"
#define BOOST_TYPEOF_PARAM_ENCODE(Param)\
BOOST_PP_CAT(BOOST_TYPEOF_ENCODE_, BOOST_PP_SEQ_ELEM(0, Param))
#define BOOST_TYPEOF_PARAM_DECODE(Param)\
BOOST_PP_CAT(BOOST_TYPEOF_DECODE_, BOOST_PP_SEQ_ELEM(0, Param))
#define BOOST_TYPEOF_PARAM_GETTYPE(Param)\
BOOST_PP_SEQ_ELEM(1, Param)
#define BOOST_TYPEOF_PARAM_GETNAME(Param)\
BOOST_PP_SEQ_ELEM(2, Param)
// "constructors"
#define BOOST_TYPEOF_TYPE_PARAM\
(TYPE_PARAM)\
(class)\
(class)
#define BOOST_TYPEOF_INTEGRAL_PARAM(Type,Name)\
(INTEGRAL_PARAM)\
(Type)\
@@ -96,21 +54,7 @@
#define BOOST_TYPEOF_DECODE_EXPLICIT_INTEGRAL_PARAM BOOST_TYPEOF_DECODE_INTEGRAL_PARAM
#define BOOST_TYPEOF_ENCODE_EXPLICIT_INTEGRAL_PARAM BOOST_TYPEOF_ENCODE_INTEGRAL_PARAM
#define BOOST_TYPEOF_EXPAND_TYPE(Param)\
BOOST_PP_CAT(BOOST_TYPEOF_EXPAND_, BOOST_PP_SEQ_ELEM(0, Param))(Param)
#define BOOST_TYPEOF_EXPAND_TYPE_PARAM(Param) BOOST_TYPEOF_PARAM_GETTYPE(Param)
#define BOOST_TYPEOF_EXPAND_INTEGRAL_PARAM(Param) BOOST_TYPEOF_PARAM_GETTYPE(Param)
#define BOOST_TYPEOF_EXPAND_EXPLICIT_INTEGRAL_PARAM(Param) BOOST_TYPEOF_PARAM_GETTYPE(Param)
#define BOOST_TYPEOF_SEQ_EXPAND_ELEMENT(z,n,seq)\
BOOST_PP_SEQ_ELEM(0,seq)(z,n,BOOST_PP_SEQ_ELEM(n,BOOST_PP_SEQ_ELEM(1,seq)))
#define BOOST_TYPEOF_SEQ_ENUM(seq,macro)\
BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT,(macro)(seq))
#define BOOST_TYPEOF_SEQ_ENUM_TRAILING(seq,macro)\
BOOST_PP_ENUM_TRAILING(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT,(macro)(seq))
#endif//BOOST_TYPEOF_COMPLIANT_TEMPLATE_ENCODING_HPP_INCLUDED
#endif//BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED

View File

@@ -13,7 +13,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::deque, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::deque, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::deque, 2)
#endif//BOOST_TYPEOF_STD_deque_hpp_INCLUDED

View File

@@ -13,13 +13,21 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_filebuf, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_filebuf, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_filebuf, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_ifstream, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ifstream, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ifstream, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_ofstream, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ofstream, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ofstream, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_fstream, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_fstream, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_fstream, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TYPE(std::filebuf)

View File

@@ -14,7 +14,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE(std::fpos, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_ios, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ios, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ios, 2)
#endif//BOOST_TYPEOF_STD_iostream_hpp_INCLUDED

View File

@@ -13,9 +13,13 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_istream, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istream, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istream, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_iostream, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_iostream, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_iostream, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TYPE(std::istream)

View File

@@ -15,12 +15,16 @@
BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator_traits, 1)
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::iterator, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 3)
#else
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::iterator, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::iterator, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::iterator, 4)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 4)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 5)
#endif//BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
BOOST_TYPEOF_REGISTER_TYPE(std::input_iterator_tag)
@@ -29,9 +33,11 @@ BOOST_TYPEOF_REGISTER_TYPE(std::forward_iterator_tag)
BOOST_TYPEOF_REGISTER_TYPE(std::bidirectional_iterator_tag)
BOOST_TYPEOF_REGISTER_TYPE(std::random_access_iterator_tag)
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::reverse_iterator, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::reverse_iterator, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::reverse_iterator, 4)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 4)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 5)
#else
BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 1)
@@ -40,21 +46,31 @@ BOOST_TYPEOF_REGISTER_TEMPLATE(std::back_insert_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::front_insert_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::insert_iterator, 1)
#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::istream_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::istream_iterator, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 3)
#else
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::istream_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::istream_iterator, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::istream_iterator, 3)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 3)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 4)
#endif//BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::ostream_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::ostream_iterator, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostream_iterator, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostream_iterator, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostream_iterator, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::istreambuf_iterator, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istreambuf_iterator, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::istreambuf_iterator, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::ostreambuf_iterator, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostreambuf_iterator, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostreambuf_iterator, 2)
#endif//BOOST_TYPEOF_STD_iterator_hpp_INCLUDED

View File

@@ -13,7 +13,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::list, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::list, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::list, 2)
#endif//BOOST_TYPEOF_STD_list_hpp_INCLUDED

View File

@@ -15,11 +15,15 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::map, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::map, 3)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::map, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::map, 3)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::map, 4)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::multimap, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::multimap, 3)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::multimap, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::multimap, 3)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::multimap, 4)
#endif//BOOST_TYPEOF_STD_map_hpp_INCLUDED

View File

@@ -13,7 +13,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_ostream, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostream, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostream, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TYPE(std::ostream)

View File

@@ -13,7 +13,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::queue, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::queue, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::queue, 2)
#endif//BOOST_TYPEOF_STD_queue_hpp_INCLUDED

View File

@@ -14,11 +14,15 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::set, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::set, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::set, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::set, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::set, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::multiset, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::multiset, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::multiset, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::multiset, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::multiset, 3)
#endif//BOOST_TYPEOF_STD_set_hpp_INCLUDED

View File

@@ -14,17 +14,25 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_stringbuf, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_stringbuf, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringbuf, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringbuf, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringbuf, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_istringstream, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_istringstream, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istringstream, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istringstream, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istringstream, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_ostringstream, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_ostringstream, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostringstream, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostringstream, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostringstream, 3)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_stringstream, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_stringstream, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringstream, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringstream, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringstream, 3)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TYPE(std::stringbuf)

View File

@@ -13,7 +13,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::stack, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::stack, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::stack, 2)
#endif//BOOST_TYPEOF_STD_stack_hpp_INCLUDED

View File

@@ -13,7 +13,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_streambuf, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_streambuf, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_streambuf, 2)
#endif//BOOST_TYPEOF_STD_streambuf_hpp_INCLUDED

View File

@@ -14,8 +14,10 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE(std::char_traits, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_string, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::basic_string, 2)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_string, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_string, 2)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_string, 3)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TYPE(std::string)

View File

@@ -13,7 +13,9 @@
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE_WITH_DEFAULTS(std::vector, 1)
#ifdef BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::vector, 1)
#endif//BOOST_TYPEOF_COMPLIANT
BOOST_TYPEOF_REGISTER_TEMPLATE(std::vector, 2)
#endif//BOOST_TYPEOF_STD_vector_hpp_INCLUDED

View File

@@ -0,0 +1,55 @@
// Copyright (C) 2004 Arkadiy Vertleyb
// Copyright (C) 2005 Peder Holt
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_REGISTER_INTEGRAL_HPP_INCLUDED
#define BOOST_TYPEOF_REGISTER_INTEGRAL_HPP_INCLUDED
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/seq.hpp>
#include <boost/preprocessor/repetition/enum_trailing.hpp>
// The template parameter description, entered by the user,
// is converted into a polymorphic "object"
// that is used to generate the code responsible for
// encoding/decoding the parameter, etc.
// make sure to cat the sequence first, and only then add the prefix.
#define BOOST_TYPEOF_MAKE_OBJ(elem) BOOST_PP_CAT(\
BOOST_TYPEOF_MAKE_OBJ,\
BOOST_PP_SEQ_CAT((_) BOOST_TYPEOF_TO_SEQ(elem))\
)
#define BOOST_TYPEOF_TO_SEQ(tokens) BOOST_TYPEOF_ ## tokens ## _BOOST_TYPEOF
// "interface"
#define BOOST_TYPEOF_PARAM_ENCODE(Param)\
BOOST_PP_CAT(BOOST_TYPEOF_ENCODE_, BOOST_PP_SEQ_ELEM(0, Param))
#define BOOST_TYPEOF_PARAM_DECODE(Param)\
BOOST_PP_CAT(BOOST_TYPEOF_DECODE_, BOOST_PP_SEQ_ELEM(0, Param))
#define BOOST_TYPEOF_PARAM_GETTYPE(Param)\
BOOST_PP_SEQ_ELEM(1, Param)
#define BOOST_TYPEOF_PARAM_GETNAME(Param)\
BOOST_PP_SEQ_ELEM(2, Param)
#define BOOST_TYPEOF_EXPAND_TYPE(Param)\
BOOST_PP_CAT(BOOST_TYPEOF_EXPAND_, BOOST_PP_SEQ_ELEM(0, Param))(Param)
//
#define BOOST_TYPEOF_SEQ_EXPAND_ELEMENT(z,n,seq)\
BOOST_PP_SEQ_ELEM(0,seq)(z,n,BOOST_PP_SEQ_ELEM(n,BOOST_PP_SEQ_ELEM(1,seq)))
#define BOOST_TYPEOF_SEQ_ENUM(seq,macro)\
BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT,(macro)(seq))
#define BOOST_TYPEOF_SEQ_ENUM_TRAILING(seq,macro)\
BOOST_PP_ENUM_TRAILING(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT,(macro)(seq))
#endif//BOOST_TYPEOF_COMPLIANT_TEMPLATE_ENCODING_HPP_INCLUDED

View File

@@ -0,0 +1,19 @@
// Copyright (C) 2005 Arkadiy Vertleyb
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_TYPE_TEMPLATE_PARAM_HPP_INCLUDED
#define BOOST_TYPEOF_TYPE_TEMPLATE_PARAM_HPP_INCLUDED
#define BOOST_TYPEOF_class_BOOST_TYPEOF (class)
#define BOOST_TYPEOF_typename_BOOST_TYPEOF (typename)
#define BOOST_TYPEOF_MAKE_OBJ_class BOOST_TYPEOF_TYPE_PARAM
#define BOOST_TYPEOF_MAKE_OBJ_typename BOOST_TYPEOF_TYPE_PARAM
#define BOOST_TYPEOF_TYPE_PARAM\
(TYPE_PARAM)\
(class)\
(class)
#endif//BOOST_TYPEOF_TYPE_TEMPLATE_PARAM_HPP_INCLUDED

View File

@@ -16,7 +16,9 @@
#include <boost/typeof/config.hpp>
#include <boost/typeof/vintage/encode_decode.hpp>
#include <boost/typeof/vintage/int_encoding.hpp>
#include <boost/typeof/register_integral.hpp>
#include <boost/typeof/template_encoding.hpp>
#include <boost/typeof/type_template_param.hpp>
#include <boost/typeof/integral_template_param.hpp>
//

View File

@@ -21,6 +21,7 @@
Optimization="0"
AdditionalIncludeDirectories="C:\boost\boost_1_32_0;..\..\..\.."
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
GeneratePreprocessedFile="0"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
@@ -127,69 +128,91 @@
</File>
<File
RelativePath=".\test_compliant.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
GeneratePreprocessedFile="0"/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath="..\..\..\..\boost\typeof\compliant\concatenate.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\config.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\encode_decode.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\increment_registration_group.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\int_encoding.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\limit_size.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\lvalue_typeof.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\modifiers.hpp">
</File>
<File
RelativePath=".\odr.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\pointers_data_members.hpp">
RelativePath="..\..\..\..\boost\typeof\integral_template_param.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\register_functions.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\register_functions_iterate.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\register_fundamental.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\register_integral.hpp">
RelativePath="..\..\..\..\boost\typeof\template_encoding.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\register_mem_functions.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\template_encoding.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\type_encoding.hpp">
RelativePath="..\..\..\..\boost\typeof\type_template_param.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\typeof.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\typeof_impl.hpp">
</File>
<Filter
Name="compliant"
Filter="">
<File
RelativePath="..\..\..\..\boost\typeof\compliant\concatenate.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\encode_decode.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\int_encoding.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\integral_template_param.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\limit_size.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\lvalue_typeof.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\modifiers.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\pointers_data_members.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\register_functions_iterate.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\register_mem_functions.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\template_encoding.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\template_template_param.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\type_encoding.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\type_template_param.hpp">
</File>
<File
RelativePath="..\..\..\..\boost\typeof\compliant\typeof_impl.hpp">
</File>
</Filter>
</Filter>
<Filter
Name="spirit"

View File

@@ -54,6 +54,24 @@ struct typeof_test
};
};
#ifdef BOOST_TYPEOF_COMPLIANT
#pragma message("template template encoding...")
namespace template_template {
template<template<typename,unsigned int> class P0,int P1>
struct tt_test {};
template<typename A,unsigned int B>
struct C {};
}
BOOST_TYPEOF_REGISTER_TEMPLATE_X(template_template::tt_test,(BOOST_TYPEOF_TEMPLATE( (typename)(unsigned int) ))(int))
BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE(template_template::C,(typename)(unsigned int))
BOOST_STATIC_ASSERT((typeof_test<template_template::tt_test<template_template::C,4> >::value));
#endif
#pragma message("modifiers...")
BOOST_STATIC_ASSERT(typeof_test<int*>::value);
@@ -99,22 +117,6 @@ BOOST_TYPEOF_REGISTER_TEMPLATE_X(with_integrals,
BOOST_STATIC_ASSERT((typeof_test<with_integrals<int, 5, 4, -3, 2, true, false, -1, 5> >::value));
BOOST_STATIC_ASSERT((typeof_test<with_integrals<int, 1, 1, 0, ULONG_MAX, false, true, -1, 0> >::value));
#ifdef BOOST_TYPEOF_COMPLIANT
#pragma message("template template encoding...")
namespace template_template {
template<template<typename,unsigned int> class P0,int P1>
struct tt_test {};
template<typename A,unsigned int B>
struct C {};
}
BOOST_TYPEOF_REGISTER_TEMPLATE_X(template_template::tt_test,(BOOST_TYPEOF_TEMPLATE( (typename)(unsigned int) ))(int))
BOOST_TYPEOF_REGISTER_TEMPLATE_X(template_template::C,(typename)(unsigned int))
BOOST_STATIC_ASSERT((typeof_test<template_template::tt_test<template_template::C,4> >::value));
#endif
#pragma message("namespace-level function pointers...")
BOOST_STATIC_ASSERT(typeof_test<double(*)()>::value);
BOOST_STATIC_ASSERT(typeof_test<double(*)(int, double, short, char*, bool, char, float, long, unsigned short)>::value);