2014-02-18 5 views
0

Есть ли разумный и переносимый способ генерации предупреждения о компиляторе в C++, когда клиент библиотеки, которую я предоставляю, использует специальную специализацию класса шаблона, которую мы хотим обескуражить ?Предупреждение компилятора при использовании определенного шаблона специализации класса

В отличие от вопросов, которые были отмечены как дубликаты, мне нужно только предупреждение, а не ошибка времени компиляции.

+0

Взгляните на [предложение для устаревшего атрибута C++ 1y] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html). Очевидно, что слишком рано, чтобы функции C++ 1y были полезны, но он очень подробно описывает текущие компиляторы. – Casey

+0

К сожалению, нет такой вещи, как предупреждение о переносном компиляторе, поскольку Стандарт не требует такой вещи, кроме как с помощью '# warning', который является препроцессором. – aschepler

+1

К сожалению, '# warning' не является стандартным. – aschepler

ответ

0

я мог повторно использовать STATIC_WARNING_TEMPLATE из Does there exist a static_warning?, предложенного в сочетании с буст :: is_same выдавать предупреждение при использовании конкретного параметра шаблона:

template<class T, class DisableWarning = void> 
class Foo { 
public: 
    STATIC_WARNING_TEMPLATE(FOO_WARNING, 
      (boost::is_same<DisableWarning, DislikedType>::value || !boost::is_same<T, DislikedType>::value), 
      "A warning") 

С этого пользователя решения можно отключить предупреждение при определении DisableWarning, как DislikedType.

Смежные вопросы