aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2013-12-09 22:59:33 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2013-12-09 22:59:33 +0000
commitf0c6059cdcd8686feb7a3f1cabf6f2f690573a05 (patch)
treecedc8a66192eeca3f9721271482ef9b516380438
parentca0a2d5d0dffed4a7e9f5a5b039876e773ea8624 (diff)
downloadgcc-f0c6059cdcd8686feb7a3f1cabf6f2f690573a05.zip
gcc-f0c6059cdcd8686feb7a3f1cabf6f2f690573a05.tar.gz
gcc-f0c6059cdcd8686feb7a3f1cabf6f2f690573a05.tar.bz2
re PR c++/59435 (sizeof...(T) as default value for an argument in the constructor does not work)
/cp 2013-12-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/59435 * parser.c (cp_parser_cache_defarg): sizeof ... ( p ) can occur in a default argument too. /testsuite 2013-12-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/59435 * g++.dg/cpp0x/variadic-sizeof3.C: New. From-SVN: r205836
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C15
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index dd33b05..2acc8c7 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2013-12-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/59435
+ * parser.c (cp_parser_cache_defarg): sizeof ... ( p ) can
+ occur in a default argument too.
+
2013-12-06 Caroline Tice <cmtice@google.com>
Submitting patch from Stephen Checkoway, s@cs.jhu.edu
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index bd4ead7..063d2ac 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -24513,7 +24513,7 @@ cp_parser_cache_defarg (cp_parser *parser, bool nsdmi)
case CPP_CLOSE_SQUARE:
if (depth == 0
/* Handle correctly int n = sizeof ... ( p ); */
- && !(nsdmi && token->type == CPP_ELLIPSIS))
+ && token->type != CPP_ELLIPSIS)
done = true;
/* Update DEPTH, if necessary. */
else if (token->type == CPP_CLOSE_PAREN
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ae5983a..b1b043c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-12-09 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/59435
+ * g++.dg/cpp0x/variadic-sizeof3.C: New.
+
2013-12-09 David Malcolm <dmalcolm@redhat.com>
* g++.dg/plugin/selfassign.c (execute_warn_self_assign): Eliminate
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C
new file mode 100644
index 0000000..7296500
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C
@@ -0,0 +1,15 @@
+// PR c++/59435
+// { dg-require-effective-target c++11 }
+
+template <typename... E>
+struct T
+{
+ T(unsigned int i = sizeof...(E)){} // does not compile
+
+ static constexpr unsigned int U = sizeof...(E);
+ T(unsigned int j, unsigned int i = U){} // compile
+};
+
+template <typename... T>
+void test(int i = sizeof...(T)) // compile
+{}