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.