...and after adding the proposed mangling to G++, I get a multiply
defined symbol on
template <typename T> constexpr T f(const T* p) { return p[0]; }
template<int> struct N { };
template <typename T> void g(T, N<f((const T*)"1")>) { }
template <typename T> void g(T, N<f((const T*)"2")>) { }
int main()
{
g('1', N<'1'>());
g('2', N<'2'>());
}