Да, вы можете проверить во время компиляции, отличаются ли «строки», возвращаемые getKeyStr
от D1
и D2
.
Сначала предоставьте функцию, которая сравнивает 2 const char *
во время компиляции:
constexpr bool different(const char *x, const char *y)
{
while(*x != '\0' )
if (*x++ != *y++) return true;
return *y != '\0';
}
, а затем сравнивает возвращаемые значения:
// this will trigger, if returned strings are the same.
static_assert( different(D1{}.getKeyStr(), D2{}.getKeyStr()) );
Редактировать: As @ Jarod42 указывает, что string_view
сравнение равно constexpr
, и поэтому функцию сравнения можно написать гораздо проще:
constexpr bool different(const char * x, const char * y)
{
return std::string_view{x} != std::string_view{y};
}
Вот демо .