Subject: [Boost-bugs] [Boost C++ Libraries] #13404: boost::container::container_detail::forward_as_tuple conflicts with std::forward_as_tuple
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2018-01-17 17:06:13
#13404: boost::container::container_detail::forward_as_tuple conflicts with
std::forward_as_tuple
--------------------------------------------+---------------------------
Reporter: Mikhail Kremniov <mkremniov@â¦> | Owner: Ion Gaztañaga
Type: Bugs | Status: new
Milestone: To Be Determined | Component: container
Version: Boost 1.66.0 | Severity: Problem
Keywords: |
--------------------------------------------+---------------------------
Internals of libc++ make unqualified calls to forward_as_tuple; this may
result in the "call ... is ambiguous" error if
boost::container::container_detail is one of the associated namespaces for
the call.
E.g. test.cpp:
{{{
#include <boost/container/set.hpp>
#include <tuple>
int main()
{
boost::container::set<int> set;
std::tuple_cat(std::make_tuple(set));
}
}}}
The terminal:
{{{
$ clang++-5.0 ~/tmp/test.cpp -std=c++14 -o test -stdlib=libc++ -isystem
./boost_1_66_0
In file included from /home/brd/tmp/test.cpp:1:
In file included from ./boost_1_66_0/boost/container/set.hpp:28:
In file included from ./boost_1_66_0/boost/container/detail/tree.hpp:36:
In file included from
./boost_1_66_0/boost/container/detail/node_alloc_holder.hpp:30:
In file included from
./boost_1_66_0/boost/container/detail/allocator_version_traits.hpp:26:
In file included from
./boost_1_66_0/boost/container/throw_exception.hpp:27:
In file included from /home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/string:470:
In file included from /home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/string_view:169:
In file included from /home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/__string:56:
In file included from /home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/algorithm:643:
In file included from /home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/memory:653:
/home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/tuple:1318:16: error: call to
'forward_as_tuple' is ambiguous
return
forward_as_tuple(_VSTD::forward<_Types>(_VSTD::get<_I0>(__t))...,
^~~~~~~~~~~~~~~~
/home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/tuple:1348:12: note: in
instantiation of function template specialization
'std::__1::__tuple_cat<std::__1::tuple<>, std::__1::__tuple_indices<>,
std::__1::__tuple_indices<0>
>::operator()<std::__1::tuple<boost::container::set<int,
std::__1::less<int>, boost::container::new_allocator<int>,
boost::container::tree_opt<boost::container::tree_type_enum::red_black_tree,
true> > >
>' requested here
return __tuple_cat<tuple<>, __tuple_indices<>,
^
/home/brd/tmp/test.cpp:8:10: note: in instantiation of function template
specialization
'std::__1::tuple_cat<std::__1::tuple<boost::container::set<int,
std::__1::less<int>, boost::container::new_allocator<int>,
boost::container::tree_opt<boost::container::tree_type_enum::red_black_tree,
true> > >>' requested here
std::tuple_cat(std::make_tuple(set));
^
./boost_1_66_0/boost/container/detail/variadic_templates_tools.hpp:81:20:
note: candidate function [with Values = <boost::container::set<int,
std::__1::less<int>, boost::container::new_allocator<int>,
boost::container::tree_opt<boost::container::tree_type_enum::red_black_tree,
true> >>]
tuple<Values&&...> forward_as_tuple(Values&&... values)
^
/home/brd/soft/clang+llvm-5.0.0-linux-
x86_64-ubuntu14.04/bin/../include/c++/v1/tuple:1114:1: note: candidate
function [with _Tp = <boost::container::set<int, std::__1::less<int>,
boost::container::new_allocator<int>,
boost::container::tree_opt<boost::container::tree_type_enum::red_black_tree,
true> >>]
forward_as_tuple(_Tp&&... __t) _NOEXCEPT
^
1 error generated.
}}}
P.S. I wonder, why is boost::container::container_detail::forward_as_tuple
needed at all, since it doesn't seem to be used outside of tests. Can it
be removed?
-- Ticket URL: <https://svn.boost.org/trac10/boost/ticket/13404> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2018-01-17 17:11:56 UTC