https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80165
Bug ID: 80165
Summary: Constexpr tuple of variant doesn't work
Product: gcc
Version: 7.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: gcc-bugs at marehr dot dialup.fu-berlin.de
Target Milestone: ---
Created attachment 41038
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41038&action=edit
Example that a tuple of a variant can't be constructed
Hi gcc-team,
first of all, I'm not sure if this bug(?) should be filed here. If not please
move it to the correct component.
I currently was trying to create a constexpr tuple of a constexpr variant as
value, which apparently doesn't work, even though I can create a constexpr
variant.
I get the following error:
```
In file included from bug_gcc_constexpr_tuple_of_variant.cpp:2:0:
/usr/local/bin/gcc-7/include/c++/7.0.1/tuple: In function ‘int main()’:
bug_gcc_constexpr_tuple_of_variant.cpp:8:51: in constexpr expansion of
‘std::make_tuple(_Elements&& ...) [with _Elements = {const std
::variant<unsigned char, short unsigned int, unsigned int>&}]()’
bug_gcc_constexpr_tuple_of_variant.cpp:8:51: in constexpr expansion of
‘std::tuple<std::variant<unsigned char, short unsigned int, un
signed int> >(std::forward<const std::variant<unsigned char, short unsigned
int, unsigned int>&>(__args#0))’
/usr/local/bin/gcc-7/include/c++/7.0.1/tuple:609:33: in constexpr expansion
of ‘((std::tuple<std::variant<unsigned char, short unsign
ed int, unsigned int> >*)this)->std::tuple<std::variant<unsigned char, short
unsigned int, unsigned int> >::<anonymous>.std::_Tuple_imp
l<0, std::variant<unsigned char, short unsigned int, unsigned int>
>::_Tuple_impl(__elements#0)’
/usr/local/bin/gcc-7/include/c++/7.0.1/tuple:361:21: error: ‘constexpr
std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [w
ith long unsigned int _Idx = 0; _Head = std::variant<unsigned char, short
unsigned int, unsigned int>]’ called in a constant expression
: _Base(__head) { }
^
/usr/local/bin/gcc-7/include/c++/7.0.1/tuple:125:17: note: ‘constexpr
std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [wi
th long unsigned int _Idx = 0; _Head = std::variant<unsigned char, short
unsigned int, unsigned int>]’ is not usable as a constexpr fun
ction because:
constexpr _Head_base(const _Head& __h)
^~~~~~~~~~
/usr/local/bin/gcc-7/include/c++/7.0.1/tuple:126:25: error: call to
non-constexpr function ‘std::variant<_Types>::variant(const std::va
riant<_Types>&) [with _Types = {unsigned char, short unsigned int, unsigned
int}]’
: _M_head_impl(__h) { }
^
In file included from bug_gcc_constexpr_tuple_of_variant.cpp:3:0:
/usr/local/bin/gcc-7/include/c++/7.0.1/variant:932:7: note:
‘std::variant<_Types>::variant(const std::variant<_Types>&) [with _Types =
{unsigned char, short unsigned int, unsigned int}]’ is not usable as a
constexpr function because:
variant(const variant&) = default;
^~~~~~~
/usr/local/bin/gcc-7/include/c++/7.0.1/variant:399:7: note: defaulted
constructor calls non-constexpr ‘std::__detail::__variant::_Varia
nt_base<_Types>::_Variant_base(const
std::__detail::__variant::_Variant_base<_Types>&) [with _Types = {unsigned
char, short unsigned in
t, unsigned int}]’
_Variant_base(const _Variant_base& __rhs)
^~~~~~~~~~~~~
zsh: exit 1 g++-7 -std=c++1z -Wall -Wextra
bug_gcc_constexpr_tuple_of_variant.cpp
```
Maybe you can tell me what I'm doing wrong.
Best regards
marehr