Re: [PATCH] wwwdocs: Add ADL to C++ non-bugs

2023-10-05 Thread Jonathan Wakely
On Wed, 4 Oct 2023 at 20:17, Jason Merrill  wrote:
>
> On 10/3/23 10:45, Jonathan Wakely wrote:
> > We have a long history of INVALID bugs about std functions being
> > available in the global namespace (PRs 27846, 67566, 82619, 99865,
> > 110602, 111553, probably others). Let's document it.
> >
> > Also de-prioritize the C++98-only bugs, which are unlikely to affect
> > anybody nowadays.
> >
> > OK for wwwdocs?
>
> OK, thanks.
>
> Jason


After pushing it I realised the formatting looks bad compared to the
other items in the list, so I've pushed the attached follow-up as
obvious.
commit 1b1a0cf29826ce9287a203cde00fd1512918fc17
Author: Jonathan Wakely 
Date:   Thu Oct 5 10:09:54 2023 +0100

Add  to new item in C++ non-bugs list

diff --git a/htdocs/bugs/index.html b/htdocs/bugs/index.html
index 41edc561..da3d4c0d 100644
--- a/htdocs/bugs/index.html
+++ b/htdocs/bugs/index.html
@@ -541,12 +541,14 @@ for details.
 
 Functions can be called without qualifying them with their namespace.
 
+
 Argument Dependent Lookup (ADL) means that functions can be found in namespaces
 associated with their arguments. This means that move(arg) can
 call std::move if arg is a type defined in namespace
 std, such as std::string or std::vector.
 If std::move is not the function you intended to call, use a
 qualified name such as ::move(arg) or foo::move(arg).
+
 
 
 Nested classes can access private members and types of the containing


Re: [PATCH] wwwdocs: Add ADL to C++ non-bugs

2023-10-04 Thread Jason Merrill

On 10/3/23 10:45, Jonathan Wakely wrote:

We have a long history of INVALID bugs about std functions being
available in the global namespace (PRs 27846, 67566, 82619, 99865,
110602, 111553, probably others). Let's document it.

Also de-prioritize the C++98-only bugs, which are unlikely to affect
anybody nowadays.

OK for wwwdocs?


OK, thanks.

Jason



[PATCH] wwwdocs: Add ADL to C++ non-bugs

2023-10-04 Thread Jonathan Wakely
We have a long history of INVALID bugs about std functions being
available in the global namespace (PRs 27846, 67566, 82619, 99865,
110602, 111553, probably others). Let's document it.

Also de-prioritize the C++98-only bugs, which are unlikely to affect
anybody nowadays.

OK for wwwdocs?

-- >8 --

Add ADL to C++ non-bugs

Also move the item about C++98 'export' to the end, and update the item
about <: digraphs that only applies to C++98.

---
 htdocs/bugs/index.html | 36 
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/htdocs/bugs/index.html b/htdocs/bugs/index.html
index 813b78c0..41edc561 100644
--- a/htdocs/bugs/index.html
+++ b/htdocs/bugs/index.html
@@ -539,15 +539,15 @@ for details.
 C++
 
 
-export
-Most C++ compilers (G++ included) never implemented C++98
-export, which was removed in C++11, and the keyword reused in
-C++20 by the Modules feature. The C++98 feature was intended to support
-separate compilation of template declarations and
-definitions. Without export, a template definition must be in
-scope to be used. The obvious workaround is simply to place all definitions in
-the header itself. Alternatively, the compilation unit containing template
-definitions may be included from the header.
+Functions can be called without qualifying them with their namespace.
+
+Argument Dependent Lookup (ADL) means that functions can be found in namespaces
+associated with their arguments. This means that move(arg) can
+call std::move if arg is a type defined in namespace
+std, such as std::string or std::vector.
+If std::move is not the function you intended to call, use a
+qualified name such as ::move(arg) or foo::move(arg).
+
 
 Nested classes can access private members and types of the containing
 class.
@@ -597,9 +597,9 @@ handler and catch it in the main thread.
 If you have a class in the global namespace, say named X,
 and want to give it as a template argument to some other class, say
 std::vector, then std::vector::X
-fails with a parser error.
+fails with a parser error in C++98/C++03 mode.
 
-The reason is that the standard mandates that the sequence
+The reason is that the C++98 standard mandates that the sequence
 : is treated as if it were the token [.
 (There are several such combinations of characters - they are called
 digraphs.) Depending on the version, the compiler then reports
@@ -608,7 +608,19 @@ a parse error before the character : (the 
colon before
 
 The simplest way to avoid this is to write std::vector
 ::X, i.e. place a space between the opening angle bracket
-and the scope operator.
+and the scope operator, or compile using C++11 or later. Defect report 1104
+changed the parser rules so that :: works as expected.
+
+
+export
+Most C++ compilers (G++ included) never implemented C++98
+export, which was removed in C++11, and the keyword reused in
+C++20 by the Modules feature. The C++98 feature was intended to support
+separate compilation of template declarations and
+definitions. Without export, a template definition must be in
+scope to be used. The obvious workaround is simply to place all definitions in
+the header itself. Alternatively, the compilation unit containing template
+definitions may be included from the header.
 
 
 Common problems when upgrading the compiler
-- 
2.41.0