https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107378
Bug ID: 107378 Summary: `get_if` implementation "is not a constant expression" Product: gcc Version: 13.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: johelegp at gmail dot com CC: johelegp at gmail dot com Target Milestone: --- See https://godbolt.org/z/cf1T7q6Tj. ```C++ #include <variant> static_assert([v = std::variant<int*>{}] { return get_if<0>(&v); }()); ``` ``` <source>:2:67: error: non-constant condition for static assertion 2 | static_assert([v = std::variant<int*>{}] { return get_if<0>(&v); }()); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ In file included from <source>:1: <source>:2:67: in 'constexpr' expansion of '<lambda closure object><lambda()>{std::variant<int*>{std::__detail::__variant::_Variant_base<int*>{std::__detail::__variant::_Move_assign_base<true, int*>{std::__detail::__variant::_Copy_assign_base<true, int*>{std::__detail::__variant::_Move_ctor_base<true, int*>{std::__detail::__variant::_Copy_ctor_base<true, int*>{std::__detail::__variant::_Variant_storage<true, int*>{std::__detail::__variant::_Variadic_union<int*>{std::__detail::__variant::_Uninitialized<int*, true>{0}}, 0}}}}}}}}.<lambda()>()' <source>:2:60: in 'constexpr' expansion of 'std::get_if<0, int*>((& v))' /opt/compiler-explorer/gcc-trunk-20221024/include/c++/13.0.0/variant:1183:11: error: '((&<anonymous>.<lambda()>::__v) != 0)' is not a constant expression 1183 | if (__ptr && __ptr->index() == _Np) | ^~~~~ Compiler returned: 1 ```