https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84689

            Bug ID: 84689
           Summary: is_invocable is true even for call operator via
                    ambiguous base
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: barry.revzin at gmail dot com
  Target Milestone: ---

This static assert fires on gcc, it does not on clang:

#include <functional>

struct base {
    void operator()(int ) { }
};

struct a : base { };
struct b : base { };

struct f: a, b {
    using a::operator();
    using b::operator();
};

int main() {
    static_assert(!std::is_invocable_v<f, int>);
}

Even though gcc reports f as being invocable with int, attempts to actually
invoke it fail:

int main() {
    f{}(4); // error: 'base' is an ambiguous base of 'f'
}

Reply via email to