https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82763
Bug ID: 82763 Summary: std::is_pod works incorrectly with volatile Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jpakkane at gmail dot com Target Milestone: --- The following program prints "is_pod 1": #include <iostream> #include <type_traits> #include <cstdint> typedef struct { int64_t dt_us; } __attribute__ ((packed)) mytime_t ; struct MyTimeDate { volatile mytime_t mytime; }; int main(int argc, const char *argv[]) { std::cout << "is_pod " << std::is_pod<MyTimeDate>::value << std::endl; return 0; } However Clang prints "is_pod 0". Originally this was filed as a bug in Clang here: https://bugs.llvm.org/show_bug.cgi?id=35076 However that bug has a long explanation on why Clang is doing the right thing and that Gcc behaves incorrectly.