std :: visit是否应该在从std :: variant派生的类上工作?

fly*_*lyx 5 c++ c++17

这是我的代码(改编自cppreference示例):

#include <iostream>
#include <variant>

class foo : public std::variant<int, float> {
public:
  foo(int v) : std::variant<int,float>(v) {}
  foo(float v) : std::variant<int,float>(v) {}
};

int main() {
  foo v = 5;

  std::visit([](auto &&arg) {
    using T = std::decay_t<decltype(arg)>;
    if constexpr (std::is_same_v<T, int>)
      std::cout << "int: " << arg << std::endl;
    else if constexpr (std::is_same_v<T, float>)
      std::cout << "float: " << arg << std::endl;
  }, v);
}
Run Code Online (Sandbox Code Playgroud)

铛(8.0.0)吃掉它并正确输出

int: 5
Run Code Online (Sandbox Code Playgroud)

但是,编译时,gcc(9.1.0)和Visual Studio 17都给出错误消息。所以我的问题是:此规范是否符合规范?

将替换vstatic_cast<std::variant<int, float>>(v)可使所有三个编译器成功编译代码,因此主要问题是是否std::visit应接受从派生的类型的值std::variant