我正在創建一個自定義的ostream類,該類在下面的片段中簡要公開。我想能夠使用std::endl
但編譯器不讓我。我不明白爲什麼。如何在自定義std :: 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: error: no match for ‘operator<<’ in ‘operator<< ((* & f), (*"aa")) << std::endl’ main.cpp:21:21: note: candidates are: main.cpp:13:9: note: template Foo& operator<<(Foo&, U&&) main.cpp:13:9: note: template argument deduction/substitution failed: main.cpp:21:21: note:
couldn't deduce template parameter ‘U’
爲什麼不能推斷參U?這不應該是typeof(std::endl)
?
'typeof'是什麼? – oldrinb
我們有'decltype'和'typeid'。 – chris
@oldrinb java的一些操作符。我的意思是'decltype'。 – qdii