для MSVC) может использоваться для отключения языковых расширений с ограниченным успехом.
от вопрос уже есть ответ здесь:
Ошибка компиляции при использовании члена пользовательского литерала 1 ответНачиная с C ++ 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, так как.
не является частью действительного идентификатора.