[Bug libstdc++/90165] New: std::variant constructs wrong alternative

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Apr 18 21:54:00 GMT 2019


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

            Bug ID: 90165
           Summary: std::variant constructs wrong alternative
           Product: gcc
           Version: 8.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

#include <variant>
#include <stdio.h>

struct none { none() = delete; };
struct any { template <typename T> any(T&&) {} };

int main()
{
  std::variant<none, any> v(std::in_place_type<none>);
  std::variant<none, any> v2(std::in_place_index<0>);
  printf("constructed alternatives %zu and %zu\n", v.index(), v2.index());
}

This program should be ill-formed, but instead compiles and outputs:

constructed alternatives 1 and 1


More information about the Gcc-bugs mailing list