https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104990

            Bug ID: 104990
           Summary: [12 Regression] std::get_time is incompatible with
                    clang 14
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bero at lindev dot ch
  Target Milestone: ---

This sample code:


#include <iomanip>
#include <iostream>

int main(int argc, char **argv) {
        std::tm tm = {};
        std::stringstream ss("2022-03-18 01:02:03");
        ss >>std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::cout << std::asctime(&tm);
}


works perfectly when built with gcc 12.0, or when built with clang 14 using
libc++ or libstdc++ versions prior to 12.0 -- but when using clang with
libstdc++ 12.0 (20220313 snapshot), it results in

In file included from test.cc:1:
In file included from
/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/iomanip:43:
In file included from
/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/locale:41:
In file included from
/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/locale_facets_nonio.h:2069:
/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/locale_facets_nonio.tcc:1477:18:
error: reference to non-static member function must be called
      if ((void*)(this->*(&time_get::do_get)) == (void*)(&time_get::do_get))
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/iomanip:433:20:
note: in instantiation of member function 'std::time_get<char>::get' requested
here
              __mg.get(_Iter(__is.rdbuf()), _Iter(), __is,
                   ^
test.cc:7:5: note: in instantiation of function template specialization
'std::operator>><char, std::char_traits<char>>' requested here
        ss >>std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
           ^
1 error generated.

Reply via email to