From ddacb0345b301bed2c5ee480cd226cd4c749e6ef Mon Sep 17 00:00:00 2001 From: Arkadiy Vertleyb Date: Sun, 18 Jun 2006 15:37:56 +0000 Subject: [PATCH] SUPPRESS_UNNAMED_NAMESPACE [SVN r34347] --- include/boost/typeof/encode_decode.hpp | 42 +++++++++++++------ include/boost/typeof/modifiers.hpp | 26 ++++++------ .../boost/typeof/pointers_data_members.hpp | 39 ++++++++--------- include/boost/typeof/register_functions.hpp | 11 ++--- include/boost/typeof/template_encoding.hpp | 4 +- .../boost/typeof/template_template_param.hpp | 12 +++--- include/boost/typeof/type_encoding.hpp | 6 +-- include/boost/typeof/typeof.hpp | 4 +- test/Jamfile | 41 +++++++++--------- test/odr_no_uns1.cpp | 15 +++++++ test/odr_no_uns1.hpp | 14 +++++++ test/odr_no_uns2.cpp | 10 +++++ test/odr_no_uns2.hpp | 14 +++++++ 13 files changed, 157 insertions(+), 81 deletions(-) create mode 100755 test/odr_no_uns1.cpp create mode 100755 test/odr_no_uns1.hpp create mode 100755 test/odr_no_uns2.cpp create mode 100755 test/odr_no_uns2.hpp diff --git a/include/boost/typeof/encode_decode.hpp b/include/boost/typeof/encode_decode.hpp index 03056be..8464fde 100755 --- a/include/boost/typeof/encode_decode.hpp +++ b/include/boost/typeof/encode_decode.hpp @@ -8,26 +8,44 @@ #include #include - namespace { namespace boost_typeof { +#ifndef BOOST_TYPEOF_SUPPRESS_UNNAMED_NAMESPACE - template - struct encode_type_impl; - - template - struct decode_type_impl - { - typedef int type; // MSVC ETI workaround - }; -}} +# define BOOST_TYPEOF_BEGIN_ENCODE_NS namespace { namespace boost_typeof { +# define BOOST_TYPEOF_END_ENCODE_NS }} +# define BOOST_TYPEOF_ENCODE_NS_QUALIFIER boost_typeof + +#else + +# define BOOST_TYPEOF_BEGIN_ENCODE_NS namespace boost { namespace type_of { +# define BOOST_TYPEOF_END_ENCODE_NS }} +# define BOOST_TYPEOF_ENCODE_NS_QUALIFIER boost::type_of + +# define BOOST_TYPEOF_TEXT "unnamed namespace is off" +# include + +#endif + +BOOST_TYPEOF_BEGIN_ENCODE_NS + +template +struct encode_type_impl; + +template +struct decode_type_impl +{ + typedef int type; // MSVC ETI workaround +}; + +BOOST_TYPEOF_END_ENCODE_NS namespace boost { namespace type_of { template - struct encode_type : boost_typeof::encode_type_impl + struct encode_type : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::encode_type_impl {}; template - struct decode_type : boost_typeof::decode_type_impl< + struct decode_type : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::decode_type_impl< typename Iter::type, typename Iter::next > diff --git a/include/boost/typeof/modifiers.hpp b/include/boost/typeof/modifiers.hpp index 2d3f96f..f1498aa 100755 --- a/include/boost/typeof/modifiers.hpp +++ b/include/boost/typeof/modifiers.hpp @@ -36,15 +36,15 @@ #define BOOST_TYPEOF_pointer_fun(T) T* #define BOOST_TYPEOF_reference_fun(T) T& -namespace { namespace boost_typeof { +BOOST_TYPEOF_BEGIN_ENCODE_NS - BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_const_fun); - BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_volatile_fun); - BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_volatile_const_fun); - BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_pointer_fun); - BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_reference_fun); +BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_const_fun); +BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_volatile_fun); +BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_volatile_const_fun); +BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_pointer_fun); +BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_reference_fun); -}} +BOOST_TYPEOF_END_ENCODE_NS #undef BOOST_TYPEOF_modifier_support #undef BOOST_TYPEOF_const_fun @@ -78,14 +78,14 @@ namespace { namespace boost_typeof { typedef typename d::iter iter;\ } -namespace { namespace boost_typeof { +BOOST_TYPEOF_BEGIN_ENCODE_NS - BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_EMPTY); - BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(const)); - BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(volatile)); - BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(volatile const)); +BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_EMPTY); +BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(const)); +BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(volatile)); +BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(volatile const)); -}} +BOOST_TYPEOF_END_ENCODE_NS #undef BOOST_TYPEOF_array_support diff --git a/include/boost/typeof/pointers_data_members.hpp b/include/boost/typeof/pointers_data_members.hpp index a821425..69415b6 100755 --- a/include/boost/typeof/pointers_data_members.hpp +++ b/include/boost/typeof/pointers_data_members.hpp @@ -10,29 +10,30 @@ #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() -namespace { namespace boost_typeof { +BOOST_TYPEOF_BEGIN_ENCODE_NS - enum {PTR_DATA_MEM_ID = BOOST_TYPEOF_UNIQUE_ID()}; +enum {PTR_DATA_MEM_ID = BOOST_TYPEOF_UNIQUE_ID()}; - template - struct encode_type_impl - { - typedef BOOST_TYPEOF_ENCODE_PARAMS(2, PTR_DATA_MEM_ID) type; +template +struct encode_type_impl +{ + typedef BOOST_TYPEOF_ENCODE_PARAMS(2, PTR_DATA_MEM_ID) type; +}; + +template +struct decode_type_impl, Iter> +{ + typedef Iter iter0; + BOOST_TYPEOF_DECODE_PARAMS(2) + + template struct workaround{ + typedef p0 T::* type; }; - template - struct decode_type_impl, Iter> - { - typedef Iter iter0; - BOOST_TYPEOF_DECODE_PARAMS(2) + typedef typename workaround::type type; + typedef iter2 iter; +}; - template struct workaround{ - typedef p0 T::* type; - }; - - typedef typename workaround::type type; - typedef iter2 iter; - }; -}} +BOOST_TYPEOF_END_ENCODE_NS #endif//BOOST_TYPEOF_POINTERS_DATA_MEMBERS_HPP_INCLUDED diff --git a/include/boost/typeof/register_functions.hpp b/include/boost/typeof/register_functions.hpp index f7badb5..2af7cec 100755 --- a/include/boost/typeof/register_functions.hpp +++ b/include/boost/typeof/register_functions.hpp @@ -32,11 +32,12 @@ enum VOLATILE_CONST_MEM_FUN_ID = FUN_ID + 6 * BOOST_PP_INC(BOOST_TYPEOF_LIMIT_FUNCTION_ARITY) }; -namespace { namespace boost_typeof { +BOOST_TYPEOF_BEGIN_ENCODE_NS - # define BOOST_PP_ITERATION_LIMITS (0, BOOST_TYPEOF_LIMIT_FUNCTION_ARITY) - # define BOOST_PP_FILENAME_1 - # include BOOST_PP_ITERATE() -}} +# define BOOST_PP_ITERATION_LIMITS (0, BOOST_TYPEOF_LIMIT_FUNCTION_ARITY) +# define BOOST_PP_FILENAME_1 +# include BOOST_PP_ITERATE() + +BOOST_TYPEOF_END_ENCODE_NS #endif//BOOST_TYPEOF_REGISTER_FUNCTIONS_HPP_INCLUDED diff --git a/include/boost/typeof/template_encoding.hpp b/include/boost/typeof/template_encoding.hpp index 5de7732..322147f 100755 --- a/include/boost/typeof/template_encoding.hpp +++ b/include/boost/typeof/template_encoding.hpp @@ -128,7 +128,7 @@ BOOST_TYPEOF_TYPEDEF_DECODED_TEMPLATE_TYPE)(Name,Params) #define BOOST_TYPEOF_REGISTER_TEMPLATE_IMPL(Name, Params, Size, ID)\ - namespace { namespace boost_typeof {\ + BOOST_TYPEOF_BEGIN_ENCODE_NS\ BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE_IMPL(Name, Params, ID)\ template struct encode_template_impl; - template struct decode_template_impl; +template struct encode_template_impl; +template struct decode_template_impl; -}} +BOOST_TYPEOF_END_ENCODE_NS namespace boost { namespace type_of { template struct encode_template - : boost_typeof::encode_template_impl + : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::encode_template_impl {}; template struct decode_template - : boost_typeof::decode_template_impl + : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::decode_template_impl {}; }} diff --git a/include/boost/typeof/type_encoding.hpp b/include/boost/typeof/type_encoding.hpp index 281f529..130bd2a 100755 --- a/include/boost/typeof/type_encoding.hpp +++ b/include/boost/typeof/type_encoding.hpp @@ -17,9 +17,9 @@ }; #define BOOST_TYPEOF_REGISTER_TYPE_EXPLICIT_ID(Type, Id) \ - namespace { namespace boost_typeof { \ - BOOST_TYPEOF_REGISTER_TYPE_IMPL(Type, Id) \ - }} + BOOST_TYPEOF_BEGIN_ENCODE_NS \ + BOOST_TYPEOF_REGISTER_TYPE_IMPL(Type, Id) \ + BOOST_TYPEOF_END_ENCODE_NS #define BOOST_TYPEOF_REGISTER_TYPE(Type) \ BOOST_TYPEOF_REGISTER_TYPE_EXPLICIT_ID(Type, BOOST_TYPEOF_UNIQUE_ID()) diff --git a/include/boost/typeof/typeof.hpp b/include/boost/typeof/typeof.hpp index 7669cab..c206354 100755 --- a/include/boost/typeof/typeof.hpp +++ b/include/boost/typeof/typeof.hpp @@ -126,6 +126,7 @@ #ifdef BOOST_TYPEOF_EMULATION # define BOOST_TYPEOF_TEXT "using typeof emulation" +# include # include # include # include @@ -136,13 +137,12 @@ #elif defined(BOOST_TYPEOF_NATIVE) # define BOOST_TYPEOF_TEXT "using native typeof" +# include # include #else # error typeof configuration error #endif -#include - // auto #define BOOST_AUTO(Var, Expr) BOOST_TYPEOF(Expr) Var = Expr #define BOOST_AUTO_TPL(Var, Expr) BOOST_TYPEOF_TPL(Expr) Var = Expr diff --git a/test/Jamfile b/test/Jamfile index 8cac5c4..1456ccc 100755 --- a/test/Jamfile +++ b/test/Jamfile @@ -24,59 +24,62 @@ local rule special-requirements ( toolset variant : properties * ) test-suite "typeof" : [ compile type.cpp : BOOST_TYPEOF_NATIVE special-requirements : type_native ] - [ compile type.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : type_emulation ] + [ compile type.cpp : BOOST_TYPEOF_EMULATION special-requirements : type_emulation ] [ compile template_type.cpp : BOOST_TYPEOF_NATIVE special-requirements : template_type_native ] - [ compile template_type.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : template_type_emulation ] + [ compile template_type.cpp : BOOST_TYPEOF_EMULATION special-requirements : template_type_emulation ] [ compile template_int.cpp : BOOST_TYPEOF_NATIVE special-requirements : template_int_native ] - [ compile template_int.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : template_int_emulation ] + [ compile template_int.cpp : BOOST_TYPEOF_EMULATION special-requirements : template_int_emulation ] [ compile template_tpl.cpp : BOOST_TYPEOF_NATIVE special-requirements : template_tpl_native ] - [ compile template_tpl.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : template_tpl_emulation ] + [ compile template_tpl.cpp : BOOST_TYPEOF_EMULATION special-requirements : template_tpl_emulation ] [ compile template_enum.cpp : BOOST_TYPEOF_NATIVE special-requirements : template_enum_native ] - [ compile template_enum.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : template_enum_emulation ] + [ compile template_enum.cpp : BOOST_TYPEOF_EMULATION special-requirements : template_enum_emulation ] [ compile template_dependent.cpp : BOOST_TYPEOF_NATIVE special-requirements : template_dependent_native ] - [ compile template_dependent.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : template_dependent_emulation ] + [ compile template_dependent.cpp : BOOST_TYPEOF_EMULATION special-requirements : template_dependent_emulation ] [ compile template_multiword.cpp : BOOST_TYPEOF_NATIVE special-requirements : template_multiword_native ] - [ compile template_multiword.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : template_multiword_emulation ] + [ compile template_multiword.cpp : BOOST_TYPEOF_EMULATION special-requirements : template_multiword_emulation ] [ compile modifiers.cpp : BOOST_TYPEOF_NATIVE special-requirements : modifiers_native ] - [ compile modifiers.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : modifiers_emulation ] + [ compile modifiers.cpp : BOOST_TYPEOF_EMULATION special-requirements : modifiers_emulation ] [ compile function.cpp : BOOST_TYPEOF_NATIVE special-requirements : function_native ] - [ compile function.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : function_emulation ] + [ compile function.cpp : BOOST_TYPEOF_EMULATION special-requirements : function_emulation ] [ compile function_binding.cpp : BOOST_TYPEOF_NATIVE special-requirements : function_binding_native ] - [ compile function_binding.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : function_binding_emulation ] + [ compile function_binding.cpp : BOOST_TYPEOF_EMULATION special-requirements : function_binding_emulation ] [ compile function_ptr.cpp : BOOST_TYPEOF_NATIVE special-requirements : function_ptr_native ] - [ compile function_ptr.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : function_ptr_emulation ] + [ compile function_ptr.cpp : BOOST_TYPEOF_EMULATION special-requirements : function_ptr_emulation ] [ compile function_ref.cpp : BOOST_TYPEOF_NATIVE special-requirements : function_ref_native ] - [ compile function_ref.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : function_ref_emulation ] + [ compile function_ref.cpp : BOOST_TYPEOF_EMULATION special-requirements : function_ref_emulation ] [ compile member_function.cpp : BOOST_TYPEOF_NATIVE special-requirements : member_function_native ] - [ compile member_function.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : member_function_emulation ] + [ compile member_function.cpp : BOOST_TYPEOF_EMULATION special-requirements : member_function_emulation ] [ compile data_member.cpp : BOOST_TYPEOF_NATIVE special-requirements : data_member_native ] - [ compile data_member.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : data_member_emulation ] + [ compile data_member.cpp : BOOST_TYPEOF_EMULATION special-requirements : data_member_emulation ] [ compile noncopyable.cpp : BOOST_TYPEOF_NATIVE special-requirements : noncopyable_native ] - [ compile noncopyable.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : noncopyable_emulation ] + [ compile noncopyable.cpp : BOOST_TYPEOF_EMULATION special-requirements : noncopyable_emulation ] [ compile std.cpp : BOOST_TYPEOF_NATIVE special-requirements : std_native ] - [ compile std.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : std_emulation ] + [ compile std.cpp : BOOST_TYPEOF_EMULATION special-requirements : std_emulation ] [ run odr1.cpp odr2.cpp : : : BOOST_TYPEOF_NATIVE special-requirements : odr_native ] - [ run odr1.cpp odr2.cpp : : : BOOST_TYPEOF_COMPLIANT special-requirements : odr_emulation ] + [ run odr1.cpp odr2.cpp : : : BOOST_TYPEOF_EMULATION special-requirements : odr_emulation ] [ compile function_ptr_from_tpl.cpp : BOOST_TYPEOF_NATIVE special-requirements : function_ptr_from_tpl_native ] - [ compile function_ptr_from_tpl.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : function_ptr_from_tpl_emulation ] + [ compile function_ptr_from_tpl.cpp : BOOST_TYPEOF_EMULATION special-requirements : function_ptr_from_tpl_emulation ] [ compile nested_typedef.cpp : BOOST_TYPEOF_NATIVE special-requirements : nested_typedef_native ] - [ compile nested_typedef.cpp : BOOST_TYPEOF_COMPLIANT special-requirements : nested_typedef_emulation ] + [ compile nested_typedef.cpp : BOOST_TYPEOF_EMULATION special-requirements : nested_typedef_emulation ] + + [ run odr_no_uns1.cpp odr_no_uns2.cpp : : : BOOST_TYPEOF_EMULATION special-requirements : odr_no_uns ] + ; diff --git a/test/odr_no_uns1.cpp b/test/odr_no_uns1.cpp new file mode 100755 index 0000000..bbf8540 --- /dev/null +++ b/test/odr_no_uns1.cpp @@ -0,0 +1,15 @@ +#include "odr_no_uns1.hpp" +#include "odr_no_uns2.hpp" + +void odr_no_uns1() +{ + odr_test_1 t1; + odr_test_2 t2; + BOOST_AUTO(v1, t1); + BOOST_AUTO(v2, t2); +} + +int main() +{ + return 0; +} diff --git a/test/odr_no_uns1.hpp b/test/odr_no_uns1.hpp new file mode 100755 index 0000000..fb65470 --- /dev/null +++ b/test/odr_no_uns1.hpp @@ -0,0 +1,14 @@ +#ifndef BOOST_TYPEOF_ODR_NO_UNS1_HPP_INCLUDED +#define BOOST_TYPEOF_ODR_NO_UNS1_HPP_INCLUDED + +#define BOOST_TYPEOF_SUPPRESS_UNNAMED_NAMESPACE +#include + +#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() + +struct odr_test_1 +{}; + +BOOST_TYPEOF_REGISTER_TYPE(odr_test_1) + +#endif//BOOST_TYPEOF_ODR_NO_UNS1_HPP_INCLUDED diff --git a/test/odr_no_uns2.cpp b/test/odr_no_uns2.cpp new file mode 100755 index 0000000..8386771 --- /dev/null +++ b/test/odr_no_uns2.cpp @@ -0,0 +1,10 @@ +#include "odr_no_uns2.hpp" +#include "odr_no_uns1.hpp" + +void odr_no_uns2() +{ + odr_test_1 t1; + odr_test_2 t2; + BOOST_AUTO(v1, t1); + BOOST_AUTO(v2, t2); +} diff --git a/test/odr_no_uns2.hpp b/test/odr_no_uns2.hpp new file mode 100755 index 0000000..5c41c94 --- /dev/null +++ b/test/odr_no_uns2.hpp @@ -0,0 +1,14 @@ +#ifndef BOOST_TYPEOF_ODR_NO_UNS2_HPP_INCLUDED +#define BOOST_TYPEOF_ODR_NO_UNS2_HPP_INCLUDED + +#define BOOST_TYPEOF_SUPPRESS_UNNAMED_NAMESPACE +#include + +#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() + +struct odr_test_2 +{}; + +BOOST_TYPEOF_REGISTER_TYPE(odr_test_2) + +#endif//BOOST_TYPEOF_ODR_NO_UNS2_HPP_INCLUDED