我正在创建一个自定义 ostream 类,该类在以下代码段中简要介绍。我希望能够使用std::endl
但编译器不让我使用。我不明白为什么。
#include <iostream>
struct Bar
{
};
template <typename T>
struct Foo
{
};
template <typename T, typename U>
Foo<T>& operator<<(Foo<T>& _foo, U&&)
{
return _foo;
}
int main()
{
Foo<Bar> f;
f << "aa" << std::endl;
}
gcc 4.7.1 给我的错误是:
main.cpp:21:21: 错误: 'operator<< ((* & f), (*"aa")) << std::endl' main.cpp:21 中的'operator<<' 不匹配: 21:注意:候选人是:main.cpp:13:9:注意:模板Foo&运算符<<(Foo&,U&&)main.cpp:13:9:注意:模板参数推导/替换失败:main.cpp:21: 21:注意:
无法推断模板参数'U'</p>
为什么不能推导出参数U?这不应该typeof(std::endl)
吗?