> #include <stdio.h>
>
> struct A {
> A() {}
> template< class E > A( E& ) { fputs( "Ouch!\n", stderr ); }
Dein C'tor template ist nicht const, der default C'tor schon. In Deinen
Funktionen verwendest Du auch nirgends const. Ich bin mir nicht ganz
sicher, aber das könnte schon der Grund sein. Wenn Du Dein E& const
machst, funktioniert es wie erwartet (hier mit G++ 7.4).
> };
>
> void foo( A ) {}
> void bar( A a ) { foo( a ); }
>
> int main()
> {
> bar( A{} );
> }
> Andererseits habe ich keine Lust [...] einen Copy-C'tor
> hinzuschreiben.
Du könntest einfach explizit die Default Implementierung einfordern,
wegen nicht const brauchst Du allerdings beide Varianten:
A(const A&) = default;
A(A&) = default;
Viele Grüße, Thomas