1

私が最近答えようとした質問は、vs2012 の c++11 サポートのエラーのようでした。

具体的には、マップへの挿入に std::move のみが使用されているにもかかわらず、コピー構築不可能な value_type で std::map をコンパイルできませんでした。間違った挿入オーバーロードが選択されているか、コンパイラが代替を考慮していません。

基本的に、次のコードかどうか知りたくありません。

#include <iostream>
#include <memory>
#include <utility>
#include <type_traits>

class Foo {
};

using namespace std;

int main() {
    cout << is_constructible<pair<const int,unique_ptr<Foo> >, pair<const int,unique_ptr<Foo> >& >::value << '\n';
    cout << is_constructible<pair<const int,unique_ptr<Foo> >, pair<const int,unique_ptr<Foo> >&& >::value << '\n';
}

出力01を与えます。

4

1 に答える 1

1

Visual Studio出力(ライブで見る):

1
1

これは明らかに間違っておりgccclang期待される結果が得られます。このバグと表示されている元の問題は、承認されたこれら 2 つのバグ レポートに関連している可能性があります。is_constructibleからの誤った結果は、実際には元のバグとは無関係である可能性があります。

于 2014-01-12T04:07:34.593 に答える