#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;
}
Mein Compiler ist VS 2015 Update 3 Die Kompilation Fehlermeldung lautet:Warum funktioniert es nicht, "operator <<" auf std :: string zu überladen?
Fehler: ungültige Operanden binäre Ausdruck ('string' (aka 'basic_string, Allocator>') und ‚string ')
Warum funktioniert es nicht wie erwartet?
Dies ist genau das, was 'Operator +' ist für – user4759923
Nein. Es ist nicht das gleiche wie 'Operator + ', aber ähnlich wie' operator + = '. Operator '' kann jedoch tun: 's1 << s2 << s3 << ...', während 'operator + =' nicht kann. – xmllmx
@xmllmx Warum versuchen Sie, dies tatsächlich mit einer Vorlage zu überladen? –