mardi 24 mai 2016

Why can't enable_if be used on specialized parameter?

I am trying to create a partial specialization for integral types. My idea was to do something similar to:

#include <type_traits>

template <typename T>
struct Class {
};

template <typename T>
struct Class<typename std::enable_if<std::is_integral<T>::value, T>::type> {
};

This however leads to the following error:

error: template parameters not deducible in partial specialization:
struct Class<typename std::enable_if<std::is_integral<T>::value, T>::type> {
       ^
note: 'T'

It does work if I use an extra template parameter:

#include <type_traits>

template <typename T, typename Enable = void>
struct Class {
};

template <typename T>
struct Class<T, typename std::enable_if<std::is_integral<T>::value>::type> {
};

Why do I need the extra template parameter?

Aucun commentaire:

Enregistrer un commentaire