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