Розглянемо наступну показову програму.
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Цю програму складено Microsoft Visual Studio Community 2019.
Але clangі gccвидайте помилку на зразок цієї
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
Якщо записати вираз, як ( 0.f ).T::~T()тоді, всі три компілятори складають програму.
Тож виникає питання: чи 0.f.T::~T()синтаксично справжня ця запис ? А якщо ні, то яке синтаксичне правило порушено?
(0.f).T::~T();
float f = 1.0f.t;призведе до помилки про числовий літерал.
float- це вбудований тип, він не має деструктора для дзвінка. Що ви навіть робите вручну? Поза територією розміщення-нової, це повинно бути великим ні-ні.
0.fі.Tспричинює це як GCC, так і Clang ...