Следующие компиляции, но я хочу, чтобы моя функция void serialise_deserialise (const auto & serialiser) придерживалась неконтролируемой ссылки, но это невозможно с использованием Declval, поскольку он возвращает ссылку на r-значение. < /p>
#include
struct MyBigDonut
{
int member;
void serialise_deserialise(const auto& serialiser)
{
//serialiser.read_or_write_type(member);
}
};
struct MySerialiserDeserialiser
{
template
static constexpr bool hasSerialiseFunction() {
// SEE IF MyDonut HAS serialise_deserialise FUNCTION THAT TAKES A REFERENCE TO THIS TYPE
constexpr bool bHasSerialiseFunction = requires {
std::declval().serialise_deserialise(std::declval());
};
return bHasSerialiseFunction;
}
template
void read_or_write_type(T& type) { }
};
int main() {
MySerialiserDeserialiser serialiser;
static_assert(MySerialiserDeserialiser::hasSerialiseFunction());
}
< /code>
Поэтому я пытался сделать: < /p>
constexpr bool bHasSerialiseFunction = requires {
const auto& this_serialiser = std::declval();
std::declval().serialise_deserialise(this_serialiser);
};
< /code>
Но я считаю, что < /p>
const auto & this_serialiser < /p>
< /blockquote>
Заглав>
Подробнее здесь: https://stackoverflow.com/questions/795 ... n-argument