https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111172

            Bug ID: 111172
           Summary: Dead code in std::get for variant?
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hewillk at gmail dot com
  Target Milestone: ---

In libstdc++'s implementation of variant's std::get, there are static_asserts
that require T not to be void, for example:


    template<typename _Tp, typename... _Types>
    constexpr _Tp&
    get(variant<_Types...>& __v)
    {
      static_assert(__detail::__variant::__exactly_once<_Tp, _Types...>,
                    "T must occur exactly once in alternatives");
      static_assert(!is_void_v<_Tp>, "_Tp must not be void");
      constexpr size_t __n = std::__find_uniq_type_in_pack<_Tp, _Types...>();
      return std::get<__n>(__v);
    }

But it looks like such static_asserts are *never* fired because the return type
already causes a compile error of forming reference to void when T is void.

Reply via email to