language-lawyer

    11热度

    2回答

    MSVC和铛/ GCC不同意是否两个不同的积分常数可以在三元操作员使用(并因此它们是否有common_type): #include <utility> int main() { return false ? std::integral_constant<int, 1>() : std::integral_constant<int, 2>(); } 上

    8热度

    1回答

    虽然investigating a stack trace discrepancy在撰写另一个答案时,我遇到了一个我不明白的行为。考虑下面的测试程序(这是尽可能下来,我可以缩小它): interface TestInterface <U> { void test (U u); } static class Test <T extends Test<T>> implements Te

    3热度

    2回答

    运行此代码时,Clang(3.9.1)和GCC(7,快照)将“1”,“2”打印到控制台。 但是,MSVC无法编译此代码: source_file.cpp(15): error C2668: 'Dictionary::set': ambiguous call to overloaded function source_file.cpp(9): note: could be 'void Diction

    8热度

    2回答

    DR 712负责将C++ 11中[basic.def.odr]/2的措辞改为当前的措辞,[basic.def.odr]2 and 3。但我还是想知道,对于变更的原因,如DR声明,内容如下:“?用” 712是一个条件表达式的整数常数操作 在描述类 定义内部初始化的静态数据成员,9.2.3.2 [class.static.data]段落3表示, 人员应仍然在命名空间范围来限定,如果它是在程序中使用 .

    6热度

    1回答

    在C++中,可以在int (x) = 0;之类的括号内声明变量。但是,如果使用this而不是变量名称,则似乎使用构造函数:A (this);调用A::A(B*)。所以第一个问题是为什么它不同于this,是因为变量不能被命名为this? struct B; struct A { A (B *) {} }; struct B { B() { [thi

    5热度

    1回答

    这基本上是有关DR 712的my prior question的延续。让我先解释一下为什么我坚持要看一些可能被认为是旧的东西,如C++ 11标准,但我的问题是[C++ 11]中的[basic.def.odr]这部分已经很难理解了,在我深入研究当前草案中的同一部分之前,我想完整地介绍这一部分,在我看来,更加复杂。 对我之前问题Austing Hasting的回答很好,但我仍然有一点在C++ 11的[

    6热度

    1回答

    我正在研究C++ 11的静态分析器。在一个类的静态常量成员和链接之间有一个交互,我不确定它是否被定义。只有当这个构造没有被定义时,我的静态分析器才会警告它。 的例子是这样的一个: 文件f1.cpp: struct Foo { static const int x = 2; }; int main(void) { return *&Foo::x; } ,并在文件f2.

    10热度

    3回答

    考虑这个类: class Base{ public: void func(double a) = delete; void func(int a) const {} }; int main(){ Base base; base.func(1); return 0; } 当使用铛++,它产生以下错误编译: clang++ --std=

    11热度

    1回答

    应该在下面的代码中调用哪个构造函数,为什么? struct S { int i; S() = default; S(void *) : i{1} { ; } }; S s{{}}; 如果使用clang(从主干),那么第二个被调用。 如果第二个构造函数被注释掉了,那么S{{}}仍然是有效的表达式,但是(我相信)在这种情况下调用了从默认构造的S{}实例中移动构

    0热度

    1回答

    以下代码与Clang(4.0)和GCC(6.3)一起编译,但使用MSVC(Visual Studio 2015 Update 1,Visual Studio 2017)失败。 template <typename T> using ConstRestrict = T const __restrict; MSVC发出错误: error C2219: syntax error: type qua