[Bug c++/68073] free(): invalid pointer errors with short strings using _GLIBCXX_USE_CXX11_ABI=1
nikola.kovacs at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Oct 24 08:42:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68073
--- Comment #3 from nikola.kovacs at gmail dot com ---
Never mind, I misread the documentation.
It looks like something else is causing the problem, since this works fine, and
it calls the destructor directly: (modified example from
http://en.cppreference.com/w/cpp/types/aligned_storage)
#include <iostream>
#include <type_traits>
#include <string>
template<class T>
class static_holder
{
typename std::aligned_storage<sizeof(T), alignof(T)>::type data;
bool allocated = false;
public:
template<typename ...Args> void put(Args&&... args)
{
if (allocated) {
reinterpret_cast<const T*>(&data)->~T();
}
new(&data) T(std::forward<Args>(args)...);
allocated = true;
}
const T& get() const
{
return *reinterpret_cast<const T*>(&data);
}
~static_holder()
{
reinterpret_cast<const T*>(&data)->~T();
}
};
int main()
{
static_holder<std::string> v1;
static_holder<std::string> v2;
v1.put("foo");
v1.put("bar");
v2.put("foobarbazasdfdafsdfadasdfasdf");
v2.put("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
std::cout << v1.get() << '\n';
std::cout << v2.get() << '\n';
}
More information about the Gcc-bugs
mailing list