我目前正在看一些可以在GCC的新版本上編譯的代碼,但不能在較舊的版本上編譯。在我的情況下,我正在使用std::back_inserter
到std::copy
從一個數據結構到一個自定義數據結構的一些數據。如果我忘記了這個自定義數據結構中的typedef value_type & const_reference
typedef,那麼這將不會在GCC 4.4上編譯。相同的代碼在GCC 4.5上編譯和運行得很好。std :: back_inserter在舊的GCC上需要const_reference。爲什麼?
這兩個編譯器版本之間的區別是什麼,它使得代碼在一個版本上編譯,而不是在另一個版本上編譯。我猜想這與C++ 11的實現有關,而C++ 11在GCC 4.4中完成得不那麼完整。可能是decltype
或另一個新的C++ 11關鍵字,我猜想。
也是這段代碼是正確的,如果我使用std::back_inserter
而沒有定義const_reference
類型?我通常認爲必須實現全套typedef(value_type
,reference
,const_reference
等)才能與STL算法庫兼容?或者我可以放心地假設,如果我的代碼在這種情況下編譯,我不會調用任何危險的東西(例如移動語義,這會破壞我的其他數據結構)。
備案(幫助像我這樣的初學者節省時間):在我加入 'typedef T&reference; typedef const T&const_reference;' 到我的數據結構中,back_inserter的錯誤c2039消失了。 –