我知道如何从类模板的实例推断出模板参数:
template <typename T>
struct foo {};
template <typename T>
struct foo_param;
template <typename T>
struct foo_param< foo<T> > {
using type = T;
};
但是对于函数模板,我却不知道如何做到相同的效果。这似乎有些困难。
template <typename T>
void bar() {}
template <auto F>
struct bar_param;
template <typename T>
struct bar_param< &bar<T> > {
using type = T;
};
执行失败
<source>:21:19: error: template argument '& bar<T>' involves template parameter(s)
21 | struct bar_param< &bar<T> > {
| ^~~~~~~
我认为我理解了这个错误(事实上后来证明我并没有理解但那是另一个问题),但我不知道如何避免它。如何从&bar<int>
推断出例如int
?
&bar<T>
的类型取决于T
(即使实际上并不是这样)。Clang 的错误消息更有意义 https://godbolt.org/z/3YvEx1 - 463035818_is_not_a_number