Розглянемо наступну показову програму.
#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 ...