我有這段非常簡單的代碼;MSVCC/g ++/icc中std deque/vector之間的不同行爲
#include <deque>
#include <vector>
using namespace std;
class A
{
public:
A(){};
~A(){};
deque<A> my_array; // vector<A> my_array;
};
int main(void)
{
}
如果我編譯這段代碼既g ++以及ICC/ICPC在Linux上編譯罰款,即使-Wall
它沒有給出警告。如果我將雙側齒輪換成矢量,情況也是一樣的。
我想建立使用MSVCC(CL)窗口這個代碼,但不幸的是它會拋出錯誤c2027:我改變std::deque
到std::vector
它編譯與Visual Studio 2010
error C2027: use of undefined type 'A'
然而,如果
我的問題是;這種行爲是否由於某種原因而被預期?如果是這樣,爲什麼編譯器之間存在差異,或者這是g ++/icc還是MSVCC的錯誤?
+1,但是,我期待只有'deque'的UB。 – iammilind
「就標準而言,無論採用哪種實現方式都沒有問題」 - 符合標準的實現不應僅僅因爲它具有未定義的行爲而無法編譯它。儘管它當然可以提供診斷功能,並將實現變爲一種適用模式,其中這些診斷只是警告可能有點模糊。 –
@SteveJessop標準 (§1.3.12)中的_undefined behavior_的定義明確說明了「本國際標準對其所規定的 ** no **要求」(emphisis補充)。在緊接着的 筆記中,它給出了「終止**翻譯**或執行(使用 發佈診斷消息)」,作爲 實現可能執行的操作的示例。 –