Fix unexpected lookup failure with GCC < 4.5.

This commit is contained in:
Kohei Takahashi
2014-11-01 21:16:26 +09:00
parent 4c110d9a88
commit 1b4acaa1b0
26 changed files with 95 additions and 0 deletions
@@ -23,6 +23,8 @@
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <int size>
struct as_deque;
@@ -43,6 +45,8 @@ namespace boost { namespace fusion { namespace detail
return deque<>();
}
};
BOOST_FUSION_BARRIER_END
}}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
@@ -67,6 +71,8 @@ namespace boost { namespace fusion { namespace detail
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
BOOST_PP_CAT(I, BOOST_PP_INC(n));
@@ -87,6 +93,7 @@ namespace boost { namespace fusion { namespace detail
#undef BOOST_FUSION_NEXT_CALL_ITERATOR
#undef BOOST_FUSION_VALUE_OF_ITERATOR
BOOST_FUSION_BARRIER_END
}}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_deque<1>
{
@@ -218,4 +219,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_deque<1>
{
@@ -428,4 +429,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_deque<1>
{
@@ -638,4 +639,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_deque<1>
{
@@ -848,4 +849,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_deque<1>
{
@@ -1058,4 +1059,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -22,6 +22,8 @@
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <int size, bool is_assoc>
struct as_map;
@@ -42,6 +44,8 @@ namespace boost { namespace fusion { namespace detail
return map<>();
}
};
BOOST_FUSION_BARRIER_END
}}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
@@ -66,6 +70,8 @@ namespace boost { namespace fusion { namespace detail
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
BOOST_PP_CAT(I, BOOST_PP_INC(n));
@@ -90,6 +96,7 @@ namespace boost { namespace fusion { namespace detail
#undef BOOST_FUSION_PAIR_FROM_ITERATOR
#undef BOOST_FUSION_DREF_CALL_ITERATOR
BOOST_FUSION_BARRIER_END
}}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <bool is_assoc>
struct as_map<1, is_assoc>
{
@@ -218,4 +219,5 @@ namespace boost { namespace fusion { namespace detail
return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9));
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <bool is_assoc>
struct as_map<1, is_assoc>
{
@@ -428,4 +429,5 @@ namespace boost { namespace fusion { namespace detail
return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19));
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <bool is_assoc>
struct as_map<1, is_assoc>
{
@@ -638,4 +639,5 @@ namespace boost { namespace fusion { namespace detail
return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29));
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <bool is_assoc>
struct as_map<1, is_assoc>
{
@@ -848,4 +849,5 @@ namespace boost { namespace fusion { namespace detail
return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39));
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <bool is_assoc>
struct as_map<1, is_assoc>
{
@@ -1058,4 +1059,5 @@ namespace boost { namespace fusion { namespace detail
return result(gen::D0::call(i0) , gen::D1::call(i1) , gen::D2::call(i2) , gen::D3::call(i3) , gen::D4::call(i4) , gen::D5::call(i5) , gen::D6::call(i6) , gen::D7::call(i7) , gen::D8::call(i8) , gen::D9::call(i9) , gen::D10::call(i10) , gen::D11::call(i11) , gen::D12::call(i12) , gen::D13::call(i13) , gen::D14::call(i14) , gen::D15::call(i15) , gen::D16::call(i16) , gen::D17::call(i17) , gen::D18::call(i18) , gen::D19::call(i19) , gen::D20::call(i20) , gen::D21::call(i21) , gen::D22::call(i22) , gen::D23::call(i23) , gen::D24::call(i24) , gen::D25::call(i25) , gen::D26::call(i26) , gen::D27::call(i27) , gen::D28::call(i28) , gen::D29::call(i29) , gen::D30::call(i30) , gen::D31::call(i31) , gen::D32::call(i32) , gen::D33::call(i33) , gen::D34::call(i34) , gen::D35::call(i35) , gen::D36::call(i36) , gen::D37::call(i37) , gen::D38::call(i38) , gen::D39::call(i39) , gen::D40::call(i40) , gen::D41::call(i41) , gen::D42::call(i42) , gen::D43::call(i43) , gen::D44::call(i44) , gen::D45::call(i45) , gen::D46::call(i46) , gen::D47::call(i47) , gen::D48::call(i48) , gen::D49::call(i49));
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -22,6 +22,8 @@
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <int size>
struct as_set;
@@ -42,6 +44,8 @@ namespace boost { namespace fusion { namespace detail
return set<>();
}
};
BOOST_FUSION_BARRIER_END
}}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
@@ -66,6 +70,8 @@ namespace boost { namespace fusion { namespace detail
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
BOOST_PP_CAT(I, BOOST_PP_INC(n));
@@ -86,6 +92,7 @@ namespace boost { namespace fusion { namespace detail
#undef BOOST_FUSION_NEXT_CALL_ITERATOR
#undef BOOST_FUSION_VALUE_OF_ITERATOR
BOOST_FUSION_BARRIER_END
}}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_set<1>
{
@@ -218,4 +219,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_set<1>
{
@@ -428,4 +429,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_set<1>
{
@@ -638,4 +639,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_set<1>
{
@@ -848,4 +849,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_set<1>
{
@@ -1058,4 +1059,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -22,6 +22,8 @@
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <int size>
struct as_vector;
@@ -42,6 +44,8 @@ namespace boost { namespace fusion { namespace detail
return vector0<>();
}
};
BOOST_FUSION_BARRIER_END
}}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
@@ -66,6 +70,7 @@ namespace boost { namespace fusion { namespace detail
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
#define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \
typedef typename fusion::result_of::next<BOOST_PP_CAT(I, n)>::type \
@@ -87,6 +92,7 @@ namespace boost { namespace fusion { namespace detail
#undef BOOST_FUSION_NEXT_CALL_ITERATOR
#undef BOOST_FUSION_VALUE_OF_ITERATOR
BOOST_FUSION_BARRIER_END
}}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_vector<1>
{
@@ -218,4 +219,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_vector<1>
{
@@ -428,4 +429,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_vector<1>
{
@@ -638,4 +639,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_vector<1>
{
@@ -848,4 +849,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39);
}
};
BOOST_FUSION_BARRIER_END
}}}
@@ -8,6 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion { namespace detail
{
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_vector<1>
{
@@ -1058,4 +1059,5 @@ namespace boost { namespace fusion { namespace detail
return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49);
}
};
BOOST_FUSION_BARRIER_END
}}}
+26
View File
@@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2014 Eric Niebler
Copyright (c) 2014 Kohei Takahashi
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)
@@ -13,4 +14,29 @@
#define BOOST_FUSION_GPU_ENABLED BOOST_GPU_ENABLED
#endif
// Enclose with inline namespace because unqualified lookup of GCC < 4.5 is broken.
//
// namespace detail {
// struct foo;
// struct X { };
// }
//
// template <typename T> void foo(T) { }
//
// int main()
// {
// foo(detail::X());
// // prog.cc: In function 'int main()':
// // prog.cc:2: error: 'struct detail::foo' is not a function,
// // prog.cc:6: error: conflict with 'template<class T> void foo(T)'
// // prog.cc:10: error: in call to 'foo'
// }
namespace boost { namespace fusion { namespace detail
{
namespace barrier { }
using namespace barrier;
}}}
#define BOOST_FUSION_BARRIER_BEGIN namespace barrier {
#define BOOST_FUSION_BARRIER_END }
#endif
+2
View File
@@ -21,6 +21,8 @@
-NBOOST_FUSION_HAS_VARIADIC_MAP
-NBOOST_FUSION_VECTOR_COPY_INIT
-NBOOST_FUSION_VECTOR_CTOR_HELPER
-NBOOST_FUSION_BARRIER_BEGIN
-NBOOST_FUSION_BARRIER_END
-S..\include
-S..\..\..
-S"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE"