Требование ограничения концепции C++ не является строгимC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Требование ограничения концепции C++ не является строгим

Сообщение Anonymous »

Учитывая концепцию,

Код: Выделить всё

template 
concept CanFoo = requires(Eigen::Array2d const& x) {
{ T::Foo(x) } -> std::same_as;
};
Как новичок в использовании концепций я ожидаю, что если я использую эту концепцию для ограничения допустимых параметров шаблона для такого класса,

Код: Выделить всё

template 
requires CanFoo
class Host_t {
T_Bar bar_;
};
Это если я попытаюсь создать экземпляр шаблона с помощью такого класса, как

Код: Выделить всё

class RedActor {
public:
static double Foo(Eigen::Array3d const& x) { return x.mean(); }
};

// Example application
TEST(YYY, XXX) {
Host_t blah;
}
он ​​завершится ошибкой компилятора, потому что подпись RedActor::Foo ожидает Eigen::Array3d const&, но в списке параметров требования концепции указан Eigen::Array2d const&.
Однако это не так... как новичок в концепциях шаблонов, это противоречит моим наименее неожиданным ожиданиям. Почему это компилируется?

Подробнее здесь: https://stackoverflow.com/questions/798 ... not-strict
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»