我定义了以下模板结构:
template<typename T> struct somestruct {};
现在有以下专业:
template<typename T> struct somestruct <std::vector<T>> {}; // OK
template<typename T> struct somestruct <decltype(std::vector<T> {})> {}; // KO
但是,最后一个专业化不会编译并出现以下错误(请参阅此处):
error: template parameters not deducible in partial specialization:
天真地,我会说这两个专业并没有那么不同,就像下面这样:
template<typename T> void test ()
{
static_assert (std::is_same_v<std::vector<T>, decltype(std::vector<T>{})> );
}
问题:导致编译器第二个专业化失败的技术原因是什么?有没有办法解决它(我的意思是我的代码,而不是编译器)?
有一篇旧帖子似乎很相似,但也许 things/compiler/c++ 可能已经改变。
因为模板参数推导由于未推导上下文而无法工作。
第二个代码片段并不完全相同,因为不涉及模板参数推导。