On Tue, Oct 25, 2022 at 12:34:50PM +0100, Jonathan Wakely wrote: > On Mon, 24 Oct 2022 at 18:30, Jason Merrill wrote: > > > > On 10/21/22 19:28, Marek Polacek wrote: > > > When testing a previous version of the patch, there were many FAILs in > > > libstdc++'s 22_locale/; all of them because the warning triggered on > > > > > > const test_type& obj = std::use_facet<test_type>(std::locale()); > > > > > > but this code looks valid -- std::use_facet doesn't return a reference > > > to its parameter. Therefore I added code to suppress the warning when > > > the call is std::use_facet. Now 22_locale/* pass even with the warning > > > on. We could exclude more std:: functions like this if desirable. > > > > Instead of adding special cases in the compiler, let's disable the > > warning around the definition of use_facet (and adjust the compiler as > > needed so that avoids the warning). > > I assume you mean using #pragma here. If we disable it around the > definition of use_facet, will that disable it for callers of > use_facet, or only within the definition of use_facet itself?
Right, a #pragma will not help, it would only disable the warning within the definition of use_facet itself. Another way would be to use some kind of attribute on use_facet but I didn't find any that would be relevant in this scenario (so I guess we'd have to add one). Marek