相关疑难解决方法(0)

不完整类型上的std :: is_constructible

我有以下代码:

#include <iostream>

class A;

int main()
{
    std::cout << std::is_constructible<A>::value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

当我使用GCC 8.3时,此代码会编译。但是,当我使用Clang 8.0时,出现编译错误,即不能在类型特征中使用不完整的类型。

哪一个是正确的?是否允许我使用is_constructible不完整的类型(预期值为false),还是不允许我使用?

c++ language-lawyer c++11

30
推荐指数
3
解决办法
1088
查看次数

在C++标准中,当违反"shall"要求时,指定要发生什么?

例如,着名的单词(§3.2/ 1)

任何翻译单元都不得包含任何变量,函数,类类型,枚举类型或模板的多个定义.

除非另有说明,否则我认为"必须"的要求应被解释为"除非程序形成不良".然而,其他人则声称"应"代表"否则行为未定义".

在每种情况下,我都会遇到标准,其中"必须"要求后面没有"行为未定义"或"无需诊断"之类的内容,其中发生的规则显然是可以诊断的规则.由我所知的所有编译器诊断出来(以上段落就是一个例子).这就是为什么我认为这意味着"否则程序形成不良",需要诊断.

无论如何,那些只是我的想法.我很欣赏一个权威的答案.

c++ language-lawyer

20
推荐指数
2
解决办法
893
查看次数

标签 统计

c++ ×2

language-lawyer ×2

c++11 ×1