使用别名模板部分特化类模板的模板参数推导

问题描述 投票:0回答:0

对于 C++20,有没有一种方法可以通过部分特化模板类的别名模板来使用类模板参数推导?

以下代码显示了我想要实现但无法使用 g++12 进行编译:

template <typename T, typename U> struct foo;

template <typename T> struct foo<T, int> {
  const T t;

  foo(T t) : t(t) {}
};

template <typename T> using foo_int = foo<T, int>;

int main() {
  auto bar = foo_int(1.0); // FAILS
}

在这个例子中,在尝试实例化

foo<T, int>
时不考虑为
bar
定义的构造函数。

如果我为

foo_int
使用派生类而不是类型别名,同样的示例有效,但这并不是我真正想要实现的。同样,我可以通过将
foo_int(1.0)
替换为
foo_int<double>(1.0)
来使其工作,但我想避免这种情况。

g++ c++20 type-alias partial-specialization ctad
© www.soinside.com 2019 - 2024. All rights reserved.