DR 217 again
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 1 Aug 2014 19:59:56 +0000 (19:59 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 1 Aug 2014 19:59:56 +0000 (19:59 +0000)
/cp
2014-08-01  Paolo Carlini  <paolo.carlini@oracle.com>

DR 217 again
* decl.c (duplicate_decls): Handle static member functions too.

/testsuite
2014-08-01  Paolo Carlini  <paolo.carlini@oracle.com>

DR 217 again
* g++.dg/tc1/dr217-2.C: New.

From-SVN: r213505

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tc1/dr217-2.C [new file with mode: 0644]

index 6a4e57d0e6da0ee81af3663ad6c8180a90bf98d9..5d06ade76d64db888b6a4b098e1e0cea24db7938 100644 (file)
@@ -1,3 +1,8 @@
+2014-08-01  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       DR 217 again
+       * decl.c (duplicate_decls): Handle static member functions too.
+
 2014-08-01  Igor Zamyatin  <igor.zamyatin@intel.com>
 
        * cp-array-notation.c (expand_an_in_modify_expr): Fix the misprint
index fd5e2e5f3c501e9d201cdb5a83e010dcc10e24e4..4e4c589aac2d9b204cc3ae6d59c88177825f8f52 100644 (file)
@@ -1706,14 +1706,11 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
        ;
       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
        {
-         tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
-         tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
+         tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
+         tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
          int i = 1;
 
-         if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
-           t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
-
-         if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE
+         if (DECL_FUNCTION_MEMBER_P (newdecl)
              && CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (newdecl)))
            {
              /* C++11 8.3.6/6.
index 1bf38ab4135f1c68903d02859bd8baf124081340..81b20e0763a5d9b335204f2b17d984397857d37e 100644 (file)
@@ -1,3 +1,8 @@
+2014-08-01  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       DR 217 again
+       * g++.dg/tc1/dr217-2.C: New.
+
 2014-08-01  Igor Zamyatin  <igor.zamyatin@intel.com>
 
        PR other/61963
diff --git a/gcc/testsuite/g++.dg/tc1/dr217-2.C b/gcc/testsuite/g++.dg/tc1/dr217-2.C
new file mode 100644 (file)
index 0000000..75c40f8
--- /dev/null
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// DR217: Default arguments for non-template member functions of class 
+//  templates 
+
+template <class T>
+struct S
+{
+  static void foo (int);
+};
+
+template <class T>
+void S<T>::foo (int = 0)  // { dg-error "" "default arguments for parameters of member functions of class templates can be specified in the initial declaration only" }
+{ }