http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51336

--- Comment #7 from Daniel Krügler <daniel.kruegler at googlemail dot com> 
2011-11-29 10:50:37 UTC ---
(In reply to comment #5)
> All right, now the is_abstract behavior is settled, do you think the fixed 
> code
> provided by Daniel in comment #1 should produce a warning, since the
> declaration is absolutely useless (I may be missing something)? 

IMO a warning could be very useful here (at least in circumstances where the
constructor is never reachable).

> Or maybe there are legitimate meta-programming tricks I am not thinking of 
> that 
> would turn regular constructors into pseudo copy constructors to disable them?

While it seems that the current defect in regard to concept-constrained member
functions mentioned in c++std-core-20783 is a defect, so that

template<ObjectType T>
class A {
 requires SomeConcept<T>
 A(const A&) {}
};

is *intended* to work, I currently see no such chance for sfinae-constrained
special-member functions - unless the new temploid nomenclature shows that in

template<class T>
struct A {
  template<class U = T, class = typename
    std::enable_if<std::is_same<U, int>::value>::type
  >
  A(A const&){}
};

A<T>::A(A const&) is considered as a temploid as well. I stay tuned to see how
"temploids" will be defined...

Your suggested addition of a copy-constructor to non-const is surely useful in
some cases, but I think the emulation is imperfect. Just consider that you try
to copy from a source that is not const.

Reply via email to