Attribute "strong" on a using-directive was a G++ extension that eventually became C++11 inline namespaces. It's been documented as deprecated for a while, but we didn't actually warn about it. This patch adds such a warning and removes the documentation.
Tested x86_64-pc-linux-gnu, applying to trunk.
commit 60ef52152fb50569e5f8ac08c149254bc44aa02c Author: Jason Merrill <ja...@redhat.com> Date: Tue Jan 24 14:31:24 2017 -0500 * name-lookup.c (parse_using_directive): Deprecate strong using. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 4004640..10fb540 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -4125,6 +4125,8 @@ parse_using_directive (tree name_space, tree attribs) tree name = get_attribute_name (a); if (is_attribute_p ("strong", name)) { + warning (OPT_Wdeprecated, "strong using is deprecated; use inline " + "namespaces instead"); if (!toplevel_bindings_p ()) error ("strong using only meaningful at namespace scope"); else if (name_space != error_mark_node) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 5cb4748..20eba82 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -21802,7 +21802,6 @@ Predefined Macros,cpp,The GNU C Preprocessor}). method denoted by a @samp{->*} or @samp{.*} expression. * C++ Attributes:: Variable, function, and type attributes for C++ only. * Function Multiversioning:: Declaring multiple function versions. -* Namespace Association:: Strong using-directives for namespace association. * Type Traits:: Compiler support for type traits. * C++ Concepts:: Improved support for generic programming. * Deprecated Features:: Things will disappear from G++. @@ -22368,8 +22367,6 @@ does not have constructors or destructors. @end table -See also @ref{Namespace Association}. - @node Function Multiversioning @section Function Multiversioning @cindex function versions @@ -22428,51 +22425,6 @@ dispatching to call the right version at runtime. Refer to the @uref{http://gcc.gnu.org/wiki/FunctionMultiVersioning, GCC wiki on Function Multiversioning} for more details. -@node Namespace Association -@section Namespace Association - -@strong{Caution:} The semantics of this extension are equivalent -to C++ 2011 inline namespaces. Users should use inline namespaces -instead as this extension will be removed in future versions of G++. - -A using-directive with @code{__attribute ((strong))} is stronger -than a normal using-directive in two ways: - -@itemize @bullet -@item -Templates from the used namespace can be specialized and explicitly -instantiated as though they were members of the using namespace. - -@item -The using namespace is considered an associated namespace of all -templates in the used namespace for purposes of argument-dependent -name lookup. -@end itemize - -The used namespace must be nested within the using namespace so that -normal unqualified lookup works properly. - -This is useful for composing a namespace transparently from -implementation namespaces. For example: - -@smallexample -namespace std @{ - namespace debug @{ - template <class T> struct A @{ @}; - @} - using namespace debug __attribute ((__strong__)); - template <> struct A<int> @{ @}; // @r{OK to specialize} - - template <class T> void f (A<T>); -@} - -int main() -@{ - f (std::A<float>()); // @r{lookup finds} std::f - f (std::A<int>()); -@} -@end smallexample - @node Type Traits @section Type Traits diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-1.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns6.C similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-1.C rename to gcc/testsuite/g++.dg/cpp0x/inline-ns6.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-2.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns7.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-2.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns7.C similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-2.C rename to gcc/testsuite/g++.dg/cpp0x/inline-ns7.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-3.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns8.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-3.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns8.C similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-3.C rename to gcc/testsuite/g++.dg/cpp0x/inline-ns8.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-5.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns9.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-5.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns9.C similarity index 100% rename from gcc/testsuite/g++.dg/lookup/strong-using-5.C rename to gcc/testsuite/g++.dg/cpp0x/inline-ns9.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-4.C b/gcc/testsuite/g++.dg/lookup/strong-using-4.C diff --git a/gcc/testsuite/g++.dg/lookup/strong-using-4.C b/gcc/testsuite/g++.dg/lookup/strong-using-4.C deleted file mode 100644 index 5ea1784..0000000 --- a/gcc/testsuite/g++.dg/lookup/strong-using-4.C +++ /dev/null @@ -1,8 +0,0 @@ -// PR c++/16301 - -// { dg-do compile } - -namespace NS2 -{ - using namespace NS1 __attribute__ ((strong)); // { dg-error "" } -} diff --git a/libstdc++-v3/doc/html/manual/debug_mode_design.html b/libstdc++-v3/doc/html/manual/debug_mode_design.html index 3373471..3fcdb2d 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_design.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_design.html @@ -250,7 +250,6 @@ namespace std }; } // namespace __cxx1998 - // namespace __debug __attribute__ ((strong)); inline namespace __debug { } } </pre></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and diff --git a/libstdc++-v3/doc/xml/manual/debug_mode.xml b/libstdc++-v3/doc/xml/manual/debug_mode.xml index ff2f1cc..9e97a1d 100644 --- a/libstdc++-v3/doc/xml/manual/debug_mode.xml +++ b/libstdc++-v3/doc/xml/manual/debug_mode.xml @@ -656,7 +656,6 @@ namespace std }; } // namespace __cxx1998 - // namespace __debug __attribute__ ((strong)); inline namespace __debug { } } </programlisting>