https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83345
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think that's the expected behaviour in C++17. The return statement in the conversion operator no longer constructs an object in C++17, it calls the conversion operator again. This will fix it: operator ref_proxy_t( void ) { return ref_proxy_t( static_cast<ICondition&>(*this) ); }