C++ C++;11模板解析错误,使用模板别名进行类型推断
我有一个愚蠢的问题,模板解析错误在堆栈溢出中非常常见,但我没有发现任何与我的问题如此接近的错误。当我专注于这个问题时,我会让别人证明我错了 因此,我添加了一个神秘但简化的代码片段,它重复了我试图做的事情C++ C++;11模板解析错误,使用模板别名进行类型推断,c++,c++11,templates,template-specialization,template-argument-deduction,C++,C++11,Templates,Template Specialization,Template Argument Deduction,我有一个愚蠢的问题,模板解析错误在堆栈溢出中非常常见,但我没有发现任何与我的问题如此接近的错误。当我专注于这个问题时,我会让别人证明我错了 因此,我添加了一个神秘但简化的代码片段,它重复了我试图做的事情 #include <functional> #include <iostream> enum selector { SEL1, SEL2, }; 我创建了一个helper函数来帮助执行每个trait类所特有的操作。我已经从cppreference复制并
#include <functional>
#include <iostream>
enum selector
{
SEL1,
SEL2,
};
我创建了一个helper函数来帮助执行每个trait类所特有的操作。我已经从cppreference复制并修改了这个函数f()
,因为这是我用作引用的函数
template <typename U, typename A, typename B>
bool f(A a, B b, U op = U())
{
return op(a, b);
}
有趣的是,如果我替换
f<TT::typename OPERATOR<OT>>
template
被遗忘,并且typename
位于错误的位置
而不是
return f< TT::typename OPERATOR<OT> >(a,b);
返回f(a,b);
你应该写
return f< typename TT::template OPERATOR<OT> >(a,b);
返回f(a,b);
f<std::less<int>>
f<std::less<OT>>
main.cpp: In function 'bool g(OT, OT)': main.cpp:39:12: error: parse
error in template argument list
return f< TT::typename OPERATOR<OT> >(a,b);
^
return f< TT::typename OPERATOR<OT> >(a,b);
return f< typename TT::template OPERATOR<OT> >(a,b);