[C++ PATCH] C++0x static assertions
Douglas Gregor
doug.gregor@gmail.com
Tue Nov 7 14:40:00 GMT 2006
Hello,
Picking off some low-hanging fruit for the C++0x mode...
The attached patch introduces static assertions into the C++ front
end, as specified in the latest C++0x working draft (N2009). The
feature is under the control of -std=(c|gnu)++0x. However, the
uglified "__static_assert" form can always be used, resulting in a
warning.
The attached patch has C++ front end bits, a change to c-common.h
that adds RID_STATIC_ASSERT, and some tests in a new testsuite
directory, g++.dg/cpp0x. ChangeLogs follow.
Tested powerpc-apple-darwin8.8.0; no new regressions. Also tested
with a tweaked Boost that maps BOOST_STATIC_ASSERT -> static_assert;
no regressions, and much nicer error messages :)
Okay for mainline?
Cheers,
Doug
2006-11-07 Douglas Gregor <doug.gregor@gmail.com>
* cp-tree.def (STATIC_ASSERT_DECL): New.
* cp-tree.h (CAN_HAVE_FULL_LANG_DECL_P): STATIC_ASSERT_DECLs
cannot have a full lang_decl.
(STATIC_ASSERT_COND): New.
(STATIC_ASSERT_MSG): New.
(finish_static_assert): Declare.
(cp_init_ts): STATIC_ASSERT_DECL has decl_common and
decl_minimal
structures.
* pt.c (instantiate_class_template): Handle STATIC_ASSERT_DECL
members.
(tsubst_expr): Handle STATIC_ASSERT_DECL statements.
* semantics.c (add_decl_expr): Static assertions have no
cleanup
points.
(finish_member_declaration): Static assertions have no linkage
information; they are entered into the scope of the class.
(finish_static_assert): New.
* lex.c (D_CPP0X): New.
(reswords): Add __static_assert, static_assert keywords.
(init_reswords): If not flag_cpp0x, mask out C++0x keywords.
* parser.c (cp_parser_block_declaration): Parse static
assertions.
(cp_parser_static_assert): New.
(cp_parser_member_declaration): Parse static assertions.
2006-11-07 Douglas Gregor <doug.gregor@gmail.com>
* g++.dg/cpp0x/static_assert1.C: New.
* g++.dg/cpp0x/static_assert2.C: New.
2006-11-07 Douglas Gregor <doug.gregor@gmail.com>
* c-common.h (enum rid): Add RID_STATIC_ASSERT.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: static_assert.patch
Type: application/octet-stream
Size: 15557 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20061107/6febb1ec/attachment.obj>
More information about the Gcc-patches
mailing list