bad_member:
{
tree member = TREE_OPERAND (value, 1);
- if (is_overloaded_fn (member))
- member = get_first_fn (member);
-
- if (DECL_FUNCTION_MEMBER_P (member)
- && ! flag_ms_extensions)
+ if (is_overloaded_fn (member) && !flag_ms_extensions)
{
gcc_rich_location richloc (loc);
/* If "member" has no arguments (other than "this"), then
add a fix-it hint. */
- if (type_num_arguments (TREE_TYPE (member)) == 1)
+ member = MAYBE_BASELINK_FUNCTIONS (member);
+ if (TREE_CODE (member) == FUNCTION_DECL
+ && DECL_OBJECT_MEMBER_FUNCTION_P (member)
+ && type_num_arguments (TREE_TYPE (member)) == 1)
richloc.add_fixit_insert_after ("()");
complained = emit_diagnostic (diag_kind, &richloc, 0,
"invalid use of member function %qD "
--- /dev/null
+// PR c++/98356
+// { dg-do compile { target c++11 } }
+
+template <template <typename> class T> struct S {
+ using A = T<int>;
+ using A::foo;
+ void foo ();
+ void bar () {foo.} // { dg-error "invalid use of member function" }
+};