sberg added a comment.

And, again for the record, with a build of LibreOffice with clang-cl (and 
`-Xclang -std=c++2b`) on Windows, at least against the C++ standard library 
from Visual Studio 2019 version 16.20.2, I ran into two issues in the standard 
library itself, when using `std::getline` and `std::istream::operator>>`:

  In file included from 
C:/lo-clang/core/setup_native/source/win32/customactions/reg_dlls/reg_dlls.cxx:12:
  
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\string(66,12):
 error: non-const lvalue reference to type 'basic_istream<...>' cannot bind to 
a temporary of type 'basic_istream<...>'
      return _Istr;
             ^~~~~
  
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\string(78,12):
 note: in instantiation of function template specialization 
'std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>' 
requested here
      return getline(_STD move(_Istr), _Str, _Delim);
             ^
  
C:/lo-clang/core/setup_native/source/win32/customactions/reg_dlls/reg_dlls.cxx(197,17):
 note: in instantiation of function template specialization 
'std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>' 
requested here
      while (std::getline(ss, sToken, L'|'))
                  ^
  1 error generated.
  make[1]: *** [C:/lo-clang/core/solenv/gbuild/LinkTarget.mk:298: 
C:/lo-clang/core/workdir/CxxObject/setup_native/source/win32/customactions/reg_dlls/reg_dlls.o]
 Error 1
  
  c:/Program Files (x86)/Microsoft Visual 
Studio/2019/Community/VC/Tools/MSVC/14.29.30037/include/string

and

  [build CXX] l10ntools/source/merge.cxx
  In file included from C:/lo-clang/core/l10ntools/source/merge.cxx:21:
  In file included from C:/lo-clang/core/include\sal/log.hxx:20:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\sstream:11:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\istream:11:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\ostream:11:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\ios:11:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\xlocnum:16:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\streambuf:11:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\xiosbase:12:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\system_error:14:
  In file included from 
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\stdexcept:12:
  
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\xstring(4971,12):
 error: non-const lvalue reference to type 'basic_istream<...>' cannot bind to 
a temporary of type 'basic_istream<...>'
      return _Istr;
             ^~~~~
  
C:/PROGRA~2/MIB055~1/2019/COMMUN~1/VC/Tools/MSVC/1429~1.300/Include\xstring(4977,29):
 note: in instantiation of function template specialization 
'std::operator>><char, std::char_traits<char>, std::allocator<char>>' requested 
here
      return _STD move(_Istr) >> _Str;
                              ^
  C:/lo-clang/core/l10ntools/source/merge.cxx(125,18): note: in instantiation 
of function template specialization 'std::operator>><char, 
std::char_traits<char>, std::allocator<char>>' requested here
      aInputStream >> sPoFile;
                   ^
  1 error generated.
  make[1]: *** [C:/lo-clang/core/solenv/gbuild/LinkTarget.mk:301: 
C:/lo-clang/core/workdir/CxxObject/l10ntools/source/merge.o] Error 1

In both cases, the reason is that library happens to implement the overload 
taking `basic_istream&` by forwarding to the overload taking `basic_istream&&` 
(and not the other way around, as libc++ and libstdc++ happen to do), and the 
fix is to replace

  return _Istr;

in the overloads taking `basic_istream&& _Istr` with

  return static_cast<basic_istream<_Elem, _Traits>&>(_Istr);

(No idea if any MSVC standard library developers are around here, who might 
want to be CC'ed on this.)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99005/new/

https://reviews.llvm.org/D99005

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to