https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86689

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Some combination of SFINAE, |[9/10/11/12 Regression]
                   |overloading, and type       |Some combination of SFINAE,
                   |deduction showing version   |overloading, and type
                   |inconsistency               |deduction showing version
                   |                            |inconsistency
   Target Milestone|---                         |9.5
     Ever confirmed|0                           |1
      Known to fail|                            |10.3.0, 11.2.0, 12.0,
                   |                            |8.5.0, 9.4.0
             Status|UNCONFIRMED                 |NEW
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |ppalka at gcc dot gnu.org
      Known to work|                            |7.5.0
   Last reconfirmed|                            |2021-09-27

--- Comment #1 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Confirmed, started with r8-7014.  Slightly more reduced rejects-valid testcase:

template <typename T> struct SomeClassTemplate {};

struct TrueType { static constexpr bool value = true; };

template <bool B, typename T=void> struct EnableIfT {};
template <typename T> struct EnableIfT<true,T> { using type = T; };

template <typename T> struct IsAType : TrueType {};

template <typename T, typename=typename EnableIfT<IsAType<T>::value,int>::type>
int SomeFunc(T const&);

template <typename T, typename=typename EnableIfT<IsAType<T>::value,int>::type>
int SomeFunc(SomeClassTemplate<T> const&) { return -1; }

template int SomeFunc(SomeClassTemplate<double> const&);


<stdin>:16:14: error: ambiguous template specialization ‘SomeFunc<>’ for ‘int
SomeFunc(const SomeClassTemplate<double>&)’
<stdin>:11:5: note: candidates are: ‘template<class T, class> int
SomeFunc(const T&)’
<stdin>:14:5: note:                 ‘template<class T, class> int
SomeFunc(const SomeClassTemplate<T>&)’

Reply via email to