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