Wor*_*der 0 c++ templates compiler-errors c++11
我刚刚创建了一个非常小的项目,当我遇到一个我无法追踪的有趣的编译器错误时,我认为我可以立即做(这是关于基本代理).这是代码的简化版本:
class NoComp {
};
class Comp {
bool operator==(const Comp& other)
{ std::cout << "Working!" << std::endl; return true;}
};
struct Test {
template<typename T>
Test(T&& obj) {}
bool operator==(const Test& other);
};
int main()
{
Test a(Comp());
Test b(NoComp());
a.operator ==(b);
}
Run Code Online (Sandbox Code Playgroud)
当编译这将产生以下编译器错误g++ version 4.8.3 20140911 (Red Hat 4.8.3-7) (GCC) 在这里找到:
main.cpp: In function 'int main()':
main.cpp:22:13: error: request for member 'operator==' in 'a', which is
of non-class type 'Test(Comp (*)())'
a.operator ==(b);
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这个错误意味着什么以及它为何存在.那里发生了什么,它是一个bug还是标准所涵盖的?如果可以的话,我该如何避开?
Test a(Comp());
Test b(NoComp());
Run Code Online (Sandbox Code Playgroud)
这声明了两个名为a和的函数b.第一个有一个类型的参数Comp(*)()和一个返回类型Test,第二个有一个NoComp(*)()并且还返回一个Test.Comp()是函数类型,并且作为函数类型的所有参数,调整为指向函数的类型.同样如此NoComp().
使用双括号:
Test a((Comp()));
Test b((NoComp()));
Run Code Online (Sandbox Code Playgroud)
或者从C++ 11开始的列表初始化.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |