Начиная с С++ 11, было возможно создать пользовательские литералы. Как и ожидалось, можно вернуть сложные структуры из таких литералов. Однако при попытке использовать такие операторы, как 123_foo.bar()
:
struct foo {
int n;
int bar() const { return n; }
};
constexpr foo operator ""_foo(unsigned long long test)
{
return foo{ static_cast<int>(test) };
}
int main() {
return 123_foo.bar();
}
GCC и Clang отвергают это, говоря, что они не могут найти operator""_foo.bar
. MSVC принимает его. Если я вместо этого напишу 123_foo.bar()
, все три компилятора принимают его
Кто здесь? Действителен ли 123_foo.bar()
?
Дополнительная информация:
- Все три принимают его за строковые литералы
- Проблема существует и для литералов
std::chrono
Я склонен полагать, что это ошибка GCC и Clang .
не является частью действительного идентификатора.