我被限制使用 C++17,我想通过传入类型标记将类型传递给 lambda,我可以在 C++20 和 C++17 中通过以下方式。
template<typename T>
struct Type
{
using type = T;
};
auto lambda20 = []<typename T>(Type<T>){
static_assert(std::is_same_v<T, int>);
};
auto lambda17 = [](auto tag){
static_assert(std::is_same_v<typename decltype(tag)::type, int>);
};
void test()
{
lambda20(Type<int>{});
lambda17(Type<int>{});
}
是否有比 typename decltype(tag)::type 更短的语法可以用来从 C++ 17 中的类型标记中提取类型?