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
всегда вызывает ошибку компиляции?