https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84231
Bug ID: 84231 Summary: [8 Regression] cannot bind non-const lvalue reference of type ‘const char*&’ to an rvalue of type ‘const char*’ Product: gcc Version: 8.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- From https://bugzilla.redhat.com/show_bug.cgi?id=1542187 GCC 8 rejects this valid code, but only inside a template (either in a function template, or a member function of a class template): struct format { template<typename T> format& operator%(const T&) { return *this; } template<typename T> format& operator%(T&) { return *this; } }; format f; template <typename> void function_template(bool b) { // Compiles OK with array lvalue: f % (b ? "x" : "x"); // Fails with pointer rvalue: f % (b ? "" : "x"); } void normal_function(bool b) { // Both cases compile OK in non-template function: f % (b ? "x" : "x"); f % (b ? "" : "x"); function_template<void>(b); }