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

Reply via email to