Path: csiph.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: Thomas Dorner Newsgroups: de.comp.lang.iso-c++ Subject: Re: template- & copy-c'tor Date: Wed, 23 Oct 2019 18:30:41 +0200 Organization: solani.org Lines: 31 Sender: "Moderation de.comp.lang.iso-c++" Approved: Markus Schaaf Message-ID: <6elftb5sr2.fsf@th-dorner.de> References: Reply-To: td-dclic01@th-dorner.de Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: reader02.eternal-september.org; posting-host="b527dc1d75404f015b67ca1b5a635d4f"; logging-data="29329"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+rAlMQslZ8sy2Kz7fGcVXD" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Xref: csiph.com de.comp.lang.iso-c++:2131 > #include > > 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