https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107138
--- Comment #18 from Colin Hirsch <gcc at cohi dot at> ---
colin@pentium:/tmp/ramdisk> cat t.cpp
#include <variant>
#include <vector>
#include <string>
class Toml {
public:
class Array;
typedef std::variant<std::string, int, double, bool, Array> value_t;
class Array {
public:
std::vector<value_t> data;
Array(const std::vector<double> &data)
{
this->data.reserve(data.size());
for (const double &elem : data) {
this->data.push_back(elem);
}
}
};
};
int main(int argc, char *argv[])
{
(void) argc;
(void) argv;
std::vector<double> a = { 42., 42. };
auto array = Toml::Array(a);
return 0;
}
colin@pentium:/tmp/ramdisk> g++ -v
Apple clang version 21.0.0 (clang-2100.1.1.101)
Target: arm64-apple-darwin25.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
colin@pentium:/tmp/ramdisk> g++-16 -O3 -Wall -Wextra -Werror -pedantic
-fsanitize=undefined -std=c++20 t.cpp 2> log
colin@pentium:/tmp/ramdisk> echo $?
1
colin@pentium:/tmp/ramdisk> grep error log
/opt/homebrew/Cellar/gcc/16.1.0/include/c++/16/bits/basic_string.h:281:17:
error: '*(const std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*)((char*)&<unnamed> + offsetof(std::value_type,
std::variant<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_storage<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::_M_u)).std::__cxx11::basic_string<char>::_M_string_length' may be
used uninitialized [-Werror=maybe-uninitialized]
/opt/homebrew/Cellar/gcc/16.1.0/include/c++/16/bits/basic_string.h:1189:19:
error: '*(const std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*)((char*)&<unnamed> + offsetof(std::value_type,
std::variant<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_storage<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::_M_u)).std::__cxx11::basic_string<char>::_M_string_length' may be
used uninitialized [-Werror=maybe-uninitialized]
/opt/homebrew/Cellar/gcc/16.1.0/include/c++/16/bits/stl_vector.h:112:49: error:
'*(std::_Vector_base<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>, std::allocator<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool, Toml::Array>
> >::_Vector_impl_data*)((char*)&<unnamed> + offsetof(std::value_type,
std::variant<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_storage<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::_M_u)).std::_Vector_base<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>, std::allocator<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool, Toml::Array>
> >::_Vector_impl_data::_M_finish' may be used uninitialized
[-Werror=maybe-uninitialized]
/opt/homebrew/Cellar/gcc/16.1.0/include/c++/16/bits/stl_vector.h:113:33: error:
'*(std::_Vector_base<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>, std::allocator<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool, Toml::Array>
> >::_Vector_impl_data*)((char*)&<unnamed> + offsetof(std::value_type,
std::variant<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_base<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_assign_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Move_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Copy_ctor_base<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::<unnamed>.std::__detail::__variant::_Variant_storage<false,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, int, double, bool,
Toml::Array>::_M_u)).std::_Vector_base<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool,
Toml::Array>, std::allocator<std::variant<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, double, bool, Toml::Array>
> >::_Vector_impl_data::_M_end_of_storage' may be used uninitialized
[-Werror=maybe-uninitialized]
cc1plus: all warnings being treated as errors
colin@pentium:/tmp/ramdisk> g++-16 -O2 -Wall -Wextra -Werror -pedantic
-fsanitize=undefined -std=c++20 t.cpp
colin@pentium:/tmp/ramdisk> echo $?
0
colin@pentium:/tmp/ramdisk> g++-16 -O3 -Wall -Wextra -Werror -pedantic
-std=c++20 t.cpp
colin@pentium:/tmp/ramdisk> echo $?
0
colin@pentium:/tmp/ramdisk>