[Bug libstdc++/80654] is_trivially_copy_constructible fails with compiler error with vector of uncopyable objects
f.heckenbach@fh-soft.de
gcc-bugzilla@gcc.gnu.org
Sun Apr 1 23:11:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80654
--- Comment #6 from Frank Heckenbach <f.heckenbach@fh-soft.de> ---
Tried to use a self-written (simple) container as a stop-gap, but it also fell
prey to this bug. Daniel Krügler wrote: "std::vector's copy constructor is not
SFINAE-friendly and causes std::is_copy_constructible to evaluate to true
regradless of it's element type." The same seems to be true for my container.
Here's a very reduced example that shows the bug:
#include <type_traits>
struct MoveOnly
{
MoveOnly (MoveOnly &&) = default;
};
template <typename T> struct s
{
T v;
s (const s &a): v (a.v) { }
};
using T = s <MoveOnly>;
int main ()
{
static_assert (!std::is_copy_constructible <T>::value, "bug");
T *a, b (*a); // correct error here shows T is not copy-constructible
}
So I guess "not SFINAE-friendly" means that the copy constructor is declared
unconditionally, even if it can't be instantiated due to T not being copyable,
right? Does this mean I need to endow my copy constructor with enable_if (with
all the ugliness that brings), or are there better workarounds (until the
bugfix makes it into a release)?
More information about the Gcc-bugs
mailing list