diff --git a/include/boost/tuple/detail/tuple_basic_no_partial_spec.hpp b/include/boost/tuple/detail/tuple_basic_no_partial_spec.hpp index fa197b1..376c13a 100644 --- a/include/boost/tuple/detail/tuple_basic_no_partial_spec.hpp +++ b/include/boost/tuple/detail/tuple_basic_no_partial_spec.hpp @@ -264,18 +264,18 @@ namespace boost { template struct element { - template + template static inline - typename detail::tuples::tuple_element_ref::RET - get(Tuple& t) + typename detail::tuples::tuple_element_ref >::RET + get(cons& t) { return element::get(t.tail); } - template + template static inline - typename detail::tuples::tuple_element_const_ref::RET - get(const Tuple& t) + typename detail::tuples::tuple_element_const_ref >::RET + get(const cons& t) { return element::get(t.tail); } @@ -284,18 +284,18 @@ namespace boost { template<> struct element<0> { - template + template static inline - typename add_reference::type - get(Tuple& t) + typename add_reference::type + get(cons& t) { return t.head; } - template + template static inline - typename add_reference::type - get(const Tuple& t) + typename add_reference::type + get(const cons& t) { return t.head; } @@ -361,22 +361,25 @@ namespace boost { } }; - // Retrieve the Nth element in the typle - template - typename detail::tuples::tuple_element_ref::RET - get(Tuple& t) + namespace detail { + namespace tuples { + template struct workaround_holder {}; + }} + + template + typename detail::tuples::tuple_element_ref >::RET + get(cons& t, detail::tuples::workaround_holder* = 0) { return element::get(t); } - // Retrieve the Nth element in the typle - template - typename detail::tuples::tuple_element_const_ref::RET - get(const Tuple& t) + template + typename detail::tuples::tuple_element_const_ref >::RET + get(const cons& t, detail::tuples::workaround_holder* = 0) { return element::get(t); } - + // Make a tuple template inline diff --git a/test/tuple_test_bench.cpp b/test/tuple_test_bench.cpp index 7250798..529d54c 100644 --- a/test/tuple_test_bench.cpp +++ b/test/tuple_test_bench.cpp @@ -273,6 +273,14 @@ void foo8() #endif } +// Testing const tuples +void foo9() +{ + const tuple t1(5, 3.3f); + BOOST_TEST(get<0>(t1) == 5); + BOOST_TEST(get<1>(t1) == 3.3f); +} + // -------------------------------- // ---------------------------- @@ -286,6 +294,7 @@ int test_main(int, char *[]) { foo6(); foo7(); foo8(); + foo9(); return 0; }