#include <iostream>
#include <vector>
class A
{
public :
std:: vector < int > data;
A ( ) = default ;
explicit A( const A& ) = default ; // <---- accidental copies are avoided
void DoTheThing( )
{
while ( data.size ( ) < 10 ) {
data.push_back ( 1 ) ;
}
}
} ;
class B
{
public :
std:: vector < A> objs;
B( )
{
A one, two, three;
objs.push_back ( one) ;
objs.push_back ( two) ;
objs.push_back ( three) ;
}
void DoTheThing( )
{
for ( auto obj: objs) { // <---- error due to `explicit` copy consttructor
obj.DoTheThing ( ) ;
std:: cout << "DEBUG length during=" << obj.data .size ( ) << std:: endl ;
}
}
} ;
int main( )
{
B b;
b.DoTheThing ( ) ;
for ( auto & obj : b.objs ) { // <--- OK
std:: cout << "DEBUG length after=" << obj.data .size ( ) << std:: endl ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgQQp7CnB1YmxpYzoKICAgIHN0ZDo6dmVjdG9yPGludD4gZGF0YTsKCiAgICBBICgpID0gZGVmYXVsdDsKICAgIGV4cGxpY2l0IEEoY29uc3QgQSYpID0gZGVmYXVsdDsgIC8vIDwtLS0tIGFjY2lkZW50YWwgY29waWVzIGFyZSBhdm9pZGVkCiAKICAgIHZvaWQgRG9UaGVUaGluZygpCiAgICB7CiAgICAgICAgd2hpbGUgKGRhdGEuc2l6ZSgpIDwgMTApIHsKICAgICAgICAgICAgZGF0YS5wdXNoX2JhY2soMSk7CiAgICAgICAgfQogICAgfQp9OwoKY2xhc3MgQgp7CnB1YmxpYzoKICAgIHN0ZDo6dmVjdG9yPEE+IG9ianM7CgogICAgQigpCiAgICB7CiAgICAgICAgQSBvbmUsIHR3bywgdGhyZWU7CiAgICAgICAgb2Jqcy5wdXNoX2JhY2sob25lKTsKICAgICAgICBvYmpzLnB1c2hfYmFjayh0d28pOwogICAgICAgIG9ianMucHVzaF9iYWNrKHRocmVlKTsKICAgIH0KCiAgICB2b2lkIERvVGhlVGhpbmcoKQogICAgewogICAgICAgIGZvciAoYXV0byBvYmo6IG9ianMpIHsgIC8vIDwtLS0tIGVycm9yIGR1ZSB0byBgZXhwbGljaXRgIGNvcHkgY29uc3R0cnVjdG9yCiAgICAgICAgICAgIG9iai5Eb1RoZVRoaW5nKCk7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiREVCVUcgbGVuZ3RoIGR1cmluZz0iIDw8IG9iai5kYXRhLnNpemUoKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgfQogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBCIGI7CiAgICBiLkRvVGhlVGhpbmcoKTsKICAgIGZvciAoYXV0byYgb2JqIDogYi5vYmpzKSB7ICAgLy8gPC0tLSBPSwogICAgICAgIHN0ZDo6Y291dCA8PCAiREVCVUcgbGVuZ3RoICBhZnRlcj0iIDw8IG9iai5kYXRhLnNpemUoKSA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=
compilation info
prog.cpp: In member function 'void B::DoTheThing()':
prog.cpp:35:24: error: no matching function for call to 'A::A(A&)'
for (auto obj: objs) { // <---- error due to `explicit` copy consttructor
^
prog.cpp:9:5: note: candidate: A::A()
A () = default;
^
prog.cpp:9:5: note: candidate expects 0 arguments, 1 provided
stdout