template<class T>
struct A
{
protected:
using user_type = T;
};
struct B : public A<double>
{};
template<class T>
concept test_type = requires
{
typename T::user_type; // 无法编译,去掉typename可以通过编译
};
template<test_type T>
struct C
{};
int main(int argc, char* argv[])
{
C<B> c;
}
vs2019, c++20, test_type里加了typename无法通过编译,去掉可以。是因为A::user_type是protected,如果是public的,就没有问题。这个是标准规定的,还是undefined,还是vs2019的bug?
--
FROM 183.128.140.*