Сообщение Re[3]: почему SFINAE не рабоает? от 18.02.2020 14:41
Изменено 18.02.2020 14:41 vopl
Re[3]: почему SFINAE не рабоает?
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, vopl, Вы писали:
V>> компилируется? Если да — значит тип результата archive_type::save не зависит от состава nonserializable_type.
X>думаю, ты ошибаешься... или я...
X>тут:
X>
X>- не важно какой- тип вернет decltype(), важно лишь — чтоб expression был валидным...
компилятор этот expression не разворачивает и внутрь его не заглядывает... Вот посмотри сюда https://gcc.godbolt.org/z/UhGLUf — там тело save вообще не задано
X>Здравствуйте, vopl, Вы писали:
V>> компилируется? Если да — значит тип результата archive_type::save не зависит от состава nonserializable_type.
X>думаю, ты ошибаешься... или я...
X>тут:
X>
X>template<typename>
X>struct sfinae_true: std::true_type{};
X>template<typename Ar, typename T>
X>static auto test_serializable(int) -> sfinae_true<decltype(std::declval<Ar>().save(std::declval<T>()))>;
X>
X>- не важно какой- тип вернет decltype(), важно лишь — чтоб expression был валидным...
компилятор этот expression не разворачивает и внутрь его не заглядывает... Вот посмотри сюда https://gcc.godbolt.org/z/UhGLUf — там тело save вообще не задано
Re[3]: почему SFINAE не рабоает?
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, vopl, Вы писали:
V>> компилируется? Если да — значит тип результата archive_type::save не зависит от состава nonserializable_type.
X>думаю, ты ошибаешься... или я...
X>тут:
X>
X>- не важно какой- тип вернет decltype(), важно лишь — чтоб expression был валидным...
компилятор этот expression не разворачивает и внутрь него не заглядывает... Вот посмотри сюда https://gcc.godbolt.org/z/UhGLUf — там тело save вообще не задано
X>Здравствуйте, vopl, Вы писали:
V>> компилируется? Если да — значит тип результата archive_type::save не зависит от состава nonserializable_type.
X>думаю, ты ошибаешься... или я...
X>тут:
X>
X>template<typename>
X>struct sfinae_true: std::true_type{};
X>template<typename Ar, typename T>
X>static auto test_serializable(int) -> sfinae_true<decltype(std::declval<Ar>().save(std::declval<T>()))>;
X>
X>- не важно какой- тип вернет decltype(), важно лишь — чтоб expression был валидным...
компилятор этот expression не разворачивает и внутрь него не заглядывает... Вот посмотри сюда https://gcc.godbolt.org/z/UhGLUf — там тело save вообще не задано