0

c_NEXTで定義されていclass AskBaseます:

struct Status {
    static auto constexpr   c_ROOT      {-999};
    static auto constexpr   c_PREVIOUS  {-1};
    static auto constexpr   c_NEXT      {1};
    static auto constexpr   c_EOF       {999};
};

後でc_NEXT使用されますtemplate<typename Container> class AskUI

auto run(){
    auto status = AskBase::Status::c_NEXT;
    for (typename Container::iterator ii=m_asks.begin();
            ii!=m_asks.end();
            ii=(AskBase::Status::c_ROOT==status)? m_asks.begin():
                (AskBase::Status::c_PREVIOUS==status)?(m_asks.begin()==ii?m_asks.begin():ii-1):
                (AskBase::Status::c_NEXT==status)?ii+1:
                m_asks.end())
        status = (*ii)->ask_user();
    return (AskBase::Status::c_NEXT==status);
}

()?3 つの式とreturnステートメント clang++ レポートを参照すると、次のようになります。

error: invalid operands to binary expression ('const std::initializer_list<int>'
and 'std::initializer_list<int>')

エラーを解決するための提案。

コマンドの使用:

clang++ -std=c++1z 
4

2 に答える 2

2

2014 年 11 月の委員会でN3922採用されたため、問題の 4 つの初期化はではなく推定されるようになりました。リストに含まれる要素が 1 つだけの場合 (その場合、型はその要素から直接推定される) を除いて、紙は直接リスト初期化コンテキスト (つまり、 ) での使用を不適切な形式にします。copy-list-initialization - - 変更されず、.intinitializer_list<int>autoauto x{/*...*/};auto x = {/*...*/};std::initializer_list

その論文の標準に追加された例からの引用:

auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
auto x5{ 3 }; // decltype(x5) is int

紙に書いてあるので

EWG からの指示は、これを C++14 の欠陥と見なすことです。

コンパイラの実装者は通常、欠陥レポートをさかのぼって適用します。これは、C++1z(17?) モードに加えて、コンパイラの C++11/14 モードで実装される場合があります。

于 2015-02-22T05:09:38.607 に答える