> On 17 Jan 2017, at 23:10, Eric Fiselier via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: ericwf > Date: Tue Jan 17 16:10:32 2017 > New Revision: 292276 > > URL: http://llvm.org/viewvc/llvm-project?rev=292276&view=rev > Log: > Fix std::string assignment ambiguity from braced initializer lists. > > When support for `basic_string_view` was added to string it also > added new assignment operators from `basic_string_view`. These caused > ambiguity when assigning from a braced initializer. This patch fixes > that regression by making the basic_string_view assignment operator > rank lower in overload resolution by making it a template. > > Added: > > libcxx/trunk/test/std/strings/basic.string/string.cons/brace_assignment.pass.cpp > Modified: > libcxx/trunk/include/string > libcxx/trunk/test/std/strings/basic.string/string.cons/string_view.pass.cpp > > Modified: libcxx/trunk/include/string > URL: > http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string?rev=292276&r1=292275&r2=292276&view=diff > ============================================================================== > --- libcxx/trunk/include/string (original) > +++ libcxx/trunk/include/string Tue Jan 17 16:10:32 2017 > @@ -818,6 +818,7 @@ public: > operator __self_view() const _NOEXCEPT { return __self_view(data(), > size()); } > > basic_string& operator=(const basic_string& __str); > + template <class = void> > _LIBCPP_INLINE_VISIBILITY > basic_string& operator=(__self_view __sv) {return assign(__sv);} > #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Hi Eric, This fix has one side effect that shows up in https://bugs.freebsd.org/216404 now: gcc has until recently defaulted to -std=gnu++98, and this makes it complain about the default template argument: In file included from /usr/include/c++/v1/__locale:15:0, from /usr/include/c++/v1/ios:216, from /usr/include/c++/v1/iostream:38, from a.cc:1: /usr/include/c++/v1/string:823:45: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11 basic_string& operator=(__self_view __sv) {return assign(__sv);} ^ Maybe the defaulted template argument can be surrounded with _LIBCPP_CXX03_LANG? -Dimitry
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits