Почему присутствие структуры Hard Logic приводит к ошибке компиляции, а структуры SoftLogic — нет?
class Noncomparable{};
struct HardLogic {
Noncomparable nc1, nc2;
void compare() {
nc1 == nc2; //Ошибка компилятора: бинарный "==": не найден оператор, принимающий левый операнд типа "Noncomparable" (или приемлемое преобразование отсутствует)
}
};
template<class T>
struct SoftLogic {
Noncomparable nc1,nc2;
void compare() {
nc1 == nc2; //Нет ошибки
}
};
В данном случае невозможность создать для шаблона SoftLogic::compare
валидную специализацию делает все программу невалидной, причем диагностика в этом случае не требуется:
17.7 Name resolution [temp.res]
8 The program is ill-formed, no diagnostic required, if:
(8.1) — no valid specialization can be generated for a template or a substatement of a constexpr if statement (9.4.1) within a template and the template is not instantiated, or
потому что SoftLogic - это не структура, а шаблон структуры. Ошибка будет только если к коде появится инстанцирование функции SoftLogic::compare, т.е. появится потребность в конкретной реализации, как в случае с HardLogic::compare.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Мне нужно написать программу которая переводит строку в числоНапример: вводится строка "1234" на выход получаем число 1234, все было бы проще...
std::weak_ptr может быть создан из std::shared_ptr, но у меня такой вопросweak_ptr может вернуть информацию про умный указатель, точнее висячий он или нет