Почему эта функция не может быть оценена как постоянная?C++

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

Сообщение Anonymous »

У меня есть ситуация, когда функция, которая, я думаю, должна оцениваться как константа, не является, и бросает ошибку, однако, если я создаю локальные переменные и использую их в качестве аргумента для функции, которую она принимает: < /p>
enum class MySerialisationMode { YES, NO };

template
struct MySerialiser;

struct ClassThatsNotAllowedToAccess{
constexpr ClassThatsNotAllowedToAccess() {}

template
consteval bool can_serialise(MySerialiser& serialiser, T* t) const
{
return true;
}

};

template
struct MySerialiser
{

template
void serialise(T* t)
{
constexpr ClassThatsNotAllowedToAccess c1;

T local_t;
MySerialiser local_serialiser;

//constexpr bool canSerialise = c1.can_serialise(*this, t); // EXPRESSION DID NOT EVALUATE TO A CONSTANT
constexpr bool canSerialise = c1.can_serialise(local_serialiser, &local_t); // WORKS

}
};

struct MyFoo2
{
};

int main(int argc, char* argv[])
{

MyFoo2 myfoo2;
MySerialiser serialiser;

serialiser.serialise(&myfoo2);
}
< /code>
Почему, если я использую локальные переменные в качестве аргумента, но не работает с (*this, t)? Я почти уверен, что оба аргумента не позволяют его работать. Я, вероятно, должен был упростить пример, чтобы использовать только один аргумент, чтобы увидеть, в чем проблема, но оба из них вызывает это.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... a-constant
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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