aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2014-09-22 19:21:20 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2014-09-22 19:21:20 +0000
commit05424ee6ec0d20b028649cce108ed442863f1063 (patch)
tree215e5c6ee4d03aafcb2cf082db57f0bab5a5aac3
parent69e69c01e715cf576c55d03214cd1f85d7e9c598 (diff)
downloadgcc-05424ee6ec0d20b028649cce108ed442863f1063.zip
gcc-05424ee6ec0d20b028649cce108ed442863f1063.tar.gz
gcc-05424ee6ec0d20b028649cce108ed442863f1063.tar.bz2
re PR c++/62219 ([c++11] Spurious error for lambda in a friend function of a class template with a default template parameters)
/cp 2014-09-22 Paolo Carlini <paolo.carlini@oracle.com> PR c++/62219 * pt.c (check_default_tmpl_args): Check LAMBDA_FUNCTION_P. /testsuite 2014-09-22 Paolo Carlini <paolo.carlini@oracle.com> PR c++/62219 * g++.dg/cpp0x/lambda/lambda-template14.C: New. From-SVN: r215477
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C11
4 files changed, 26 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3dc8c7c..7d23a77 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/62219
+ * pt.c (check_default_tmpl_args): Check LAMBDA_FUNCTION_P.
+
2014-09-22 Jason Merrill <jason@redhat.com>
* decl.c (poplevel): Don't warn about unused vars in template scope.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 8a12713..da8bd8f 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -4456,9 +4456,11 @@ check_default_tmpl_args (tree decl, tree parms, bool is_primary,
local scope. */
return true;
- if (TREE_CODE (decl) == TYPE_DECL
- && TREE_TYPE (decl)
- && LAMBDA_TYPE_P (TREE_TYPE (decl)))
+ if ((TREE_CODE (decl) == TYPE_DECL
+ && TREE_TYPE (decl)
+ && LAMBDA_TYPE_P (TREE_TYPE (decl)))
+ || (TREE_CODE (decl) == FUNCTION_DECL
+ && LAMBDA_FUNCTION_P (decl)))
/* A lambda doesn't have an explicit declaration; don't complain
about the parms of the enclosing class. */
return true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index efbb084..08ba764 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-22 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/62219
+ * g++.dg/cpp0x/lambda/lambda-template14.C: New.
+
2014-09-22 Alan Lawrence <alan.lawrence@arm.com>
* gcc.dg/vect/vect-reduc-or_1.c: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C
new file mode 100644
index 0000000..b73ef75
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template14.C
@@ -0,0 +1,11 @@
+// PR c++/62219
+// { dg-do compile { target c++11 } }
+
+template< class = void >
+struct S
+{
+ friend void foo( S )
+ {
+ [](){};
+ }
+};