https://wandbox.org/permlink/PpR6G0gcvMRoxhhZ

отаю над проектом, который имеет функцию шаблона следующим образом:

template <class T> 
T foo<T>(T val) { return someFunc(val); }

template <>
bool foo<bool>(bool val) { return otherFunc(val); };

Теперь у меня есть классBar, который я не хочу принимать в качестве входных данных. На самом деле, я хочу, чтобы он легко генерировал ошибку компиляции. Проблема в том, что если я сделаю это:

template <>
Bar foo<Bar>(Bar val) { static_assert(false,"uh oh..."); }

Это терпит неудачу на каждой компиляции. я нашелhttps://stackoverflow.com/a/3926854/7673414, который говорит, что мне нужно сделать ссылку на тип шаблона, в противном случае статическое утверждение всегда имеет место. Проблема в том, что у меня нет типа шаблона здесь. Если я сделаю:

template< typename T >
struct always_false { 
    enum { value = false };  
};

template <>
Bar foo<Bar>(Bar val) { static_assert(always_false<Bar>::value,"uh oh..."); }

тогда это также всегда терпит неудачу при компиляции. Есть ли способ обеспечить создание экземпляра шаблона с типомBar всегда вызывает ошибку компиляции?

Ответы на вопрос(1)

Ваш ответ на вопрос