https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83615
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- const has nothing to do with it: typedef int **t; class S { public: explicit operator t() { return 0; } }; int main() { S val; t &&ref (val); return 0; } is also rejected.