https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80737
TC <rs2740 at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rs2740 at gmail dot com
--- Comment #1 from TC <rs2740 at gmail dot com> ---
#include <variant>
#include <any>
std::variant<std::any> a, b(a);
In file included from main.cpp:1:0:
/usr/local/include/c++/7.1.0/variant: In instantiation of 'struct
std::__detail::__variant::__accepted_index<std::variant<std::any>&,
std::variant<std::any>, void>':
/usr/local/include/c++/7.1.0/variant:911:26: required from 'constexpr const
size_t std::variant<std::any>::__accepted_index<std::variant<std::any>&>'
/usr/local/include/c++/7.1.0/variant:940:6: required by substitution of
'template<class _Tp, class> constexpr std::variant<std::any>::variant(_Tp&&)
[with _Tp = std::variant<std::any>&; <template-parameter-1-2> = <missing>]'
main.cpp:4:30: required from here
/usr/local/include/c++/7.1.0/variant:559:49: error: no matching function for
call to
'std::__detail::__variant::__overload_set<std::any>::_S_fun(std::variant<std::any>&)'
decltype(__overload_set<_Types...>::_S_fun(std::declval<_Tp>()),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: candidate: static
std::integral_constant<long unsigned int, sizeof... (_Rest)>
std::__detail::__variant::__overload_set<_First, _Rest ...>::_S_fun(_First)
[with _First = std::any; _Rest = {}]
static integral_constant<size_t, sizeof...(_Rest)> _S_fun(_First);
^~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: no known conversion for
argument 1 from 'std::variant<std::any>' to 'std::any'
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate: static void
std::__detail::__variant::__overload_set<_Types>::_S_fun() [with _Types = {}]
{ static void _S_fun(); };
^~~~~~
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate expects 0
arguments, 1 provided
/usr/local/include/c++/7.1.0/variant:559:49: error: no matching function for
call to
'std::__detail::__variant::__overload_set<std::any>::_S_fun(std::variant<std::any>&)'
decltype(__overload_set<_Types...>::_S_fun(std::declval<_Tp>()),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: candidate: static
std::integral_constant<long unsigned int, sizeof... (_Rest)>
std::__detail::__variant::__overload_set<_First, _Rest ...>::_S_fun(_First)
[with _First = std::any; _Rest = {}]
static integral_constant<size_t, sizeof...(_Rest)> _S_fun(_First);
^~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: no known conversion for
argument 1 from 'std::variant<std::any>' to 'std::any'
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate: static void
std::__detail::__variant::__overload_set<_Types>::_S_fun() [with _Types = {}]
{ static void _S_fun(); };
^~~~~~
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate expects 0
arguments, 1 provided
/usr/local/include/c++/7.1.0/variant:559:49: error: no matching function for
call to
'std::__detail::__variant::__overload_set<std::any>::_S_fun(std::variant<std::any>&)'
decltype(__overload_set<_Types...>::_S_fun(std::declval<_Tp>()),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: candidate: static
std::integral_constant<long unsigned int, sizeof... (_Rest)>
std::__detail::__variant::__overload_set<_First, _Rest ...>::_S_fun(_First)
[with _First = std::any; _Rest = {}]
static integral_constant<size_t, sizeof...(_Rest)> _S_fun(_First);
^~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: no known conversion for
argument 1 from 'std::variant<std::any>' to 'std::any'
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate: static void
std::__detail::__variant::__overload_set<_Types>::_S_fun() [with _Types = {}]
{ static void _S_fun(); };
^~~~~~
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate expects 0
arguments, 1 provided
/usr/local/include/c++/7.1.0/variant: In instantiation of 'constexpr const
size_t std::__detail::__variant::__accepted_index<std::variant<std::any>&,
std::variant<std::any>, void>::value':
/usr/local/include/c++/7.1.0/variant:911:26: required from 'constexpr const
size_t std::variant<std::any>::__accepted_index<std::variant<std::any>&>'
/usr/local/include/c++/7.1.0/variant:940:6: required by substitution of
'template<class _Tp, class> constexpr std::variant<std::any>::variant(_Tp&&)
[with _Tp = std::variant<std::any>&; <template-parameter-1-2> = <missing>]'
main.cpp:4:30: required from here
/usr/local/include/c++/7.1.0/variant:564:12: error: no matching function for
call to
'std::__detail::__variant::__overload_set<std::any>::_S_fun(std::variant<std::any>&)'
- decltype(__overload_set<_Types...>::
~~~~~~~~~~~~~~~~~~~~~~~~~~~
_S_fun(std::declval<_Tp>()))::value;
~~~~~~^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: candidate: static
std::integral_constant<long unsigned int, sizeof... (_Rest)>
std::__detail::__variant::__overload_set<_First, _Rest ...>::_S_fun(_First)
[with _First = std::any; _Rest = {}]
static integral_constant<size_t, sizeof...(_Rest)> _S_fun(_First);
^~~~~~
/usr/local/include/c++/7.1.0/variant:541:58: note: no known conversion for
argument 1 from 'std::variant<std::any>' to 'std::any'
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate: static void
std::__detail::__variant::__overload_set<_Types>::_S_fun() [with _Types = {}]
{ static void _S_fun(); };
^~~~~~
/usr/local/include/c++/7.1.0/variant:535:19: note: candidate expects 0
arguments, 1 provided
Looks like the constraint on the convert-everything constructor needs to check
for is_same<decay_t<_Tp>, variant> first and short circuit if that's true.