Руководство по дедукции C++17, определенное внутри класса, неэффективно внутри этого класса, но полезно вне класса
#include <variant>
struct A { };
struct B { };
struct Test
{
template<typename Ts>
struct overloaded : Ts { };
// 1st Deduction Guide
template<typename Ts>
overloaded(Ts)->overloaded<Ts>;
// 2nd Deduction Guide for class "A"
overloaded(A)->overloaded<A>;
void Fun()
{
// OK
overloaded obj1{ A{} };
// Error: No instance of constructor matches the argument list
// I think the 1st Deduction Guide is not effective inside class "Test"
overloaded obj2{ B{} };
}
};
int main()
{
// All Deduction Guides in class "Test" are effective here
// OK
Test::overloaded obj1{ A{} };
// OK
Test::overloaded obj2{ B{} };
return 0;
}
Я определил некоторые
C++17
Руководства по вычету внутри класса под названием
Test
.
Но я обнаружил, что первое руководство по дедукции, которое включает аргумент шаблона
Ts
неэффективен внутри класса
Test
сам. Но эффективен вне его, например, в
main
функция.
template<typename Ts>
overloaded(Ts)->overloaded<Ts>;
2-е руководство по вычету, которое не включает аргумент шаблона, эффективно как внутри, так и вне класса.
overloaded(A)->overloaded<A>;
Кто-нибудь может сказать мне, почему?
Моя IDE
Visual Studio 2019
, стандарт C++
C++17
.
Спасибо.