Viewing file: ctor4.C (1.06 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// { dg-do compile }
// Copyright (C) 2001 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 24 Jun 2004 <nathan@codesourcery.com>
// Origin Rani Sharoni via giovannibajo@libero.it // Bug 16174, SFINAE failure.
template <class T> struct K { K();
K(K<T> & rhs); K(K<T> const& rhs); template <class U> K(K<U> const& rhs);
private: template <class U> struct A; template <class U> struct A< K<U> const> { typedef typename K<U>::compile_time_error type; };
// This is used to reject calls to the copy constructor // with objects which are top-level const. If they are // const, the specialization of A is instantiated and // causes a compile time error. Otherwise, the general // template is picked up, it misses definition, so this // ctor declaration is rejected by SFINAE and everybody // is happy. // GCC 3.4.1pre and 3.5.0 always matches A's specialization // when instantiating from foo(), and this causes the error. template <class U> K(U& rhs, typename A<U>::type = 0); };
K<int> foo(void) { return K<int>(); }
|