2

現在、レモンライブラリをプロジェクトに取り入れようとしています。ほとんどの開発者は Windows を使用しており、MSVC でコンパイルしますが、(この部分では) gcc と clang でコンパイルするのは私が担当しています。

gcc が再現しないという clang のエラーに遭遇し、コードを削減することができました。

#include <lemon/dfs.h>

int main() {
    lemon::ListDigraph g{};
    lemon::ListDigraph::Node node = g.nodeFromId(42);
    lemon::Dfs<lemon::ListDigraph> dfs{g};
    lemon::SimplePath<lemon::ListDigraph> path = dfs.path(node);
    return 0;
}  

gcc では、エラーはありません。

/usr/bin/g++-5 -std=c++11 -Wall -O3  -I${SRC_ROOT}/external/lemon/latest -I${BIN_ROOT}/lemon -o ${TMP_ROOT}/core/src/core.cpp.o -c ${SRC_ROOT}/core/src/core.cpp

しかし、クランでは:

/usr/bin/clang++-3.7 -std=c++11 -Wall -stdlib=libc++ -O3 -I${SRC_ROOT}/external/lemon/latest -I${BIN_ROOT}/lemon -o ${TMP_ROOT}/core/src/core.cpp.o -c ${SRC_ROOT}/core/src/core.cpp

In file included from ${SRC_ROOT}/core/src/core.cpp:1:
In file included from ${SRC_ROOT}/external/lemon/latest/lemon/dfs.h:31:
${SRC_ROOT}/external/lemon/latest/lemon/path.h:408:23: error: no viable
      conversion from 'typename PredMapPath<ListDigraph, NodeMap<Arc> >::RevArcIt' to
      'lemon::ListDigraphBase::Arc'
        data[index] = it;;
                      ^~

:

  • SRC_ROOTBIN_ROOTTMP_ROOT読みやすくするために置き換えられます
  • スニペットのソース コードは機能しませんが、コンパイルする必要があります (実際の大きなコードを修正します)。
  • 実際のソース コードには C++11 の機能が本当に必要です。
  • gcc5
  • clang 3.7
  • lemon1.3.1

質問:

  • 旗を鳴らすのを忘れましたか?
  • レモンはclangと完全に互換性がありますか?
  • このエラーを解決するにはどうすればよいですか?
4

1 に答える 1