Я хотел бы получить ошибку компилятора в случае, если я передам номер float
моему классу, который ожидает int
в коде ниже. Приведенный ниже код работает с GCC 4.9.3Проверка типов с использованием шаблонов во время компиляции
gcc -std=c++98 -O0 -g3 -Wall -Wextra -c -fmessage-length=0
Как следует изменить код, который будет возвращать ошибку компиляции в случае различных типов между типом экземпляра класса и методы ввода типа аргумента?
#include <iostream>
template <typename T>
class CheckValidity {
public:
CheckValidity(){};
T isFoo(T variable)
{
T result = static_cast<T>(0);
if (variable > static_cast<T>(5))
{
result = static_cast<T>(1);
}
return result;
};
};
int main() {
CheckValidity<int> checkValidityInt;
std::cout << checkValidityInt.isFoo(6.0f) << std::endl;
return 0;
}
Is -std = C++ 98 жесткое требование, или вы можете использовать какой-либо более высокий стандарт?Какой-то тип 'typename std :: enable_if'-magic должен делать трюк, но я не уверен, что он доступен на C++ 98. – Kent
@ Kent, я мог бы использовать до C++ 03. К сожалению, мой встроенный компилятор больше не поддерживает. – Eagle