考虑下面的演示程序。
#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()
语法上是否有效?如果没有,那么什么语法规则就被打破了?
以及
—
cigien
(0.f).T::~T();
一个简单的
—
1201ProgramAlarm
float f = 1.0f.t;
将产生有关数字文字的错误。
A
—
Jesper Juhl,
float
是内置类型,它没有析构函数供您调用。您甚至在手动调用析构函数在做什么?在新的安置区域之外,这应该是一个很大的禁忌。
@JesparJuhl它不是析构函数而是伪析构函数,我只是知道它存在。标签信息有一个示例(它也有一个不合理的调用析构函数btw的调用)
—
idclev 463035818
0.f
,.T
会使GCC和Clang都接受这一点...