Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11模板解析错误,使用模板别名进行类型推断_C++_C++11_Templates_Template Specialization_Template Argument Deduction - Fatal编程技术网

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);