Commit 717a5c62 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/52521 ([C++11] user defined literals and order of declaration)

	PR c++/52521
	* parser.c (lookup_literal_operator): Return fn only if
	processed all arguments from args vector and argtypes is
	void_list_node.

	* g++.dg/cpp0x/udlit-args2.C: New test.

From-SVN: r185375
parent 036bd35e
2012-03-14 Jakub Jelinek <jakub@redhat.com>
PR c++/52521
* parser.c (lookup_literal_operator): Return fn only if
processed all arguments from args vector and argtypes is
void_list_node.
2012-01-30 Dodji Seketeli <dodji@redhat.com> 2012-01-30 Dodji Seketeli <dodji@redhat.com>
PR c++/51641 PR c++/51641
......
/* C++ Parser. /* C++ Parser.
Copyright (C) 2000, 2001, 2002, 2003, 2004, Copyright (C) 2000, 2001, 2002, 2003, 2004,
2005, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 2005, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
Written by Mark Mitchell <mark@codesourcery.com>. Written by Mark Mitchell <mark@codesourcery.com>.
This file is part of GCC. This file is part of GCC.
...@@ -3581,7 +3581,13 @@ lookup_literal_operator (tree name, VEC(tree,gc) *args) ...@@ -3581,7 +3581,13 @@ lookup_literal_operator (tree name, VEC(tree,gc) *args)
TREE_TYPE (tparm)))) TREE_TYPE (tparm))))
found = false; found = false;
} }
if (found) if (found
&& ix == VEC_length (tree, args)
/* May be this should be sufficient_parms_p instead,
depending on how exactly should user-defined literals
work in presence of default arguments on the literal
operator parameters. */
&& argtypes == void_list_node)
return fn; return fn;
} }
} }
......
2012-03-14 Jakub Jelinek <jakub@redhat.com>
PR c++/52521
* g++.dg/cpp0x/udlit-args2.C: New test.
2012-03-13 Oleg Endo <olegendo@gcc.gnu.org> 2012-03-13 Oleg Endo <olegendo@gcc.gnu.org>
PR target/48596 PR target/48596
......
// PR c++/52521
// { dg-do compile }
// { dg-options -std=c++11 }
#include <cstddef>
int operator "" _a (const char *);
int operator "" _a (const char *, std::size_t);
int a = 123_a;
int a2 = "abc"_a;
int operator "" _b (const char *, std::size_t);
int operator "" _b (const char *);
int b = 123_b;
int b2 = "abc"_b;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment