https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110344
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu.org --- Comment #2 from Jason Merrill <jason at gcc dot gnu.org> --- Reduced version of the paper's testcase that we already (wrongly) accept: class Doer { private: const void *ob; int (*fn)(const void *); public: template <typename T> constexpr Doer(const T &t) : ob{&t}, fn{[](const void *p) { return static_cast<const T *>(p)->doit(); }} {} constexpr int operator()() const { return fn(ob); } }; struct Thing { constexpr int doit() const { return 42; }; }; static_assert (Doer(Thing())() == 42);