1
#include <string>
#include <type_traits>
using namespace std;
template
<
typename CharT,
template<typename> class Traits,
template<typename> class Allocator,
typename RightT,
typename StringT = basic_string
<
CharT,
Traits<CharT>,
Allocator<CharT>
>
>
enable_if_t
<
is_constructible<StringT, RightT>::value,
StringT&
>
operator <<(StringT& lhs, const RightT& rhs)
{
return lhs.append(rhs);
}
int main()
{
string s1, s2;
s1 << s2; // compilation error!
return 0;
}
我的編譯器是VS 2015更新3.編譯錯誤信息是:爲什麼不能在std :: string上重載「operator <<」?
錯誤:無效的操作數的二進制表達式( '字串'(又名 'basic_string的,分配器>')和 「串')
爲什麼它不按預期工作?
這正是'operator +'用於 – user4759923
的號碼。它與'operator + ',但類似於'operator + ='。然而,'operator <<'可以:'s1 << s2 << s3 << ...',而'operator + ='不能。 – xmllmx
@xmllmx你爲什麼試圖用模板實際地重載這個? –