2017-04-12 20 views
1

私はOSX上でkenlmコンパイルしたいが、私はエラーを取得しています:コンパイラは-std = C++ 11で起動されますが、std :: moveは未定義なのはなぜですか?

error: no member named 'move' in namespace 'std' 

他のポストは

'-std=c++11'

でコンパイルすることをお勧めしますが、私はまだ同じエラーを取得しています。どうすれば解決できますか?

g++ --version出力は:

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 8.1.0 (clang-802.0.38) 
Target: x86_64-apple-darwin16.5.0 
Thread model: posix 
InstalledDir: /Library/Developer/CommandLineTools/usr/bin 

kenlmのビルドスクリプトは次のようになります。

from setuptools import setup, Extension 
import glob 
import platform 
import os 

#Does gcc compile with this header and library? 
def compile_test(header, library): 
    dummy_path = os.path.join(os.path.dirname(__file__), "dummy") 
    command = "bash -c \"g++ -include " + header + " -l" + library + " -x c++ - <<<'int main() {}' -o " + dummy_path + " >/dev/null 2>/dev/null && rm " + dummy_path + " 2>/dev/null\"" 
    return os.system(command) == 0 
... 

#We don't need -std=c++11 but python seems to be compiled with it now. https://github.com/kpu/kenlm/issues/86 
ARGS = ['-O3', '-DNDEBUG', '-DKENLM_MAX_ORDER=6', '-std=c++11'] 
ext_modules = [ 
    Extension(name='kenlm', 
     sources=FILES + ['python/kenlm.cpp'], 
     language='C++', 
     include_dirs=['.'], 
     libraries=LIBS, 
     extra_compile_args=ARGS) 
] 
... 

std::move使用してコード:

#ifndef UTIL_FILE_STREAM_H 
#define UTIL_FILE_STREAM_H 
#include <utility> 
#include "util/fake_ostream.hh" 
#include "util/file.hh" 
#include "util/scoped.hh" 

#include <cassert> 
#include <cstring> 

#include <stdint.h> 

namespace util { 

class FileStream : public FakeOStream<FileStream> { 
    public: 
    explicit FileStream(int out = -1, std::size_t buffer_size = 8192) 
     : buf_(util::MallocOrThrow(std::max<std::size_t>(buffer_size, kToStringMaxBytes))), 
     current_(static_cast<char*>(buf_.get())), 
     end_(current_ + std::max<std::size_t>(buffer_size, kToStringMaxBytes)), 
     fd_(out) {} 

#if __cplusplus >= 201103L 
    FileStream(FileStream &&from) noexcept : buf_(std::move(from.buf_)), current_(from.current_), end_(from.end_), fd_(from.fd_) { 
     from.end_ = reinterpret_cast<char*>(from.buf_.get()); 
     from.current_ = from.end_; 
    } 
#endif 
+0

'g ++ --version'? – YSC

+0

が私の投稿に追加されました – bear

+2

#include

答えて

2

によると、、std::move (N2812) §"Impact on the Standard Library"はバージョン4.5でのみ追加され、バージョン4.6では改訂されました。

標準ライブラリのバージョンを4.5以上に更新する必要があります。あなたのものは4.2.1です。

関連する問題