C++ icc认为boost::filesystem3::path是不完整的类型

C++ icc认为boost::filesystem3::path是不完整的类型,c++,templates,boost,icc,incomplete-type,C++,Templates,Boost,Icc,Incomplete Type,我正试图用icc建立一个名为Mitsuba的程序。但是当我编译时,我会收到很多错误,说某个类型不完整。以下是几个例子: icc -o build/release/libcore/thread.os -c -O3 -Wall -g -pipe -O3 -ipo -no-prec-div -xSSE3 -fp-model fast=2 -openmp -mfpmath=sse -march=nocona -fno-math-errno -fomit-frame-pointer -DMTS_DEBUG

我正试图用icc建立一个名为Mitsuba的程序。但是当我编译时,我会收到很多错误,说某个类型不完整。以下是几个例子:

icc -o build/release/libcore/thread.os -c -O3 -Wall -g -pipe -O3 -ipo -no-prec-div -xSSE3 -fp-model fast=2 -openmp -mfpmath=sse -march=nocona -fno-math-errno -fomit-frame-pointer -DMTS_DEBUG -DSINGLE_PRECISION -DSPECTRUM_SAMPLES=3 -DMTS_SSE -DMTS_HAS_COHERENT_RT -fopenmp -fvisibility=hidden -std=c++0x -wd2928 -Qoption,cpp,--rvalue_ctor_is_not_copy_ctor -fPIC -DMTS_BUILD_MODULE=MTS_MODULE_CORE -DMTS_HAS_LIBPNG=1 -DMTS_HAS_LIBJPEG=1 -I/usr/include/OpenEXR -I/u/i/n/ingrassi/eigen -I/usr/include/OpenEXR -Iinclude src/libcore/thread.cpp
/usr/include/c++/4.4.7/bits/stl_deque.h(450): error: incomplete type is not allowed
    _M_impl._Tp_alloc_type::deallocate(__p, __deque_buf_size(sizeof(_Tp)));
                                                                    ^
          detected during:
            instantiation of "void std::_Deque_base<_Tp, _Alloc>::_M_deallocate_node(_Tp *) [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 553
            instantiation of "void std::_Deque_base<_Tp, _Alloc>::_M_destroy_nodes(_Tp **, _Tp **) [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 476
            instantiation of "std::_Deque_base<_Tp, _Alloc>::~_Deque_base() [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 790
            instantiation of "std::deque<_Tp, _Alloc>::~deque() [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 97 of "include/mitsuba/core/fresolver.h"

/usr/include/c++/4.4.7/bits/stl_deque.h(1652): error: an incomplete class type is not allowed
    if (!__has_trivial_destructor(value_type))
         ^
          detected during:
            instantiation of "void std::deque<_Tp, _Alloc>::_M_destroy_data(std::deque<_Tp, _Alloc>::iterator, std::deque<_Tp, _Alloc>::iterator, const std::allocator<_Tp> &) [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 790
            instantiation of "std::deque<_Tp, _Alloc>::~deque() [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 97 of "include/mitsuba/core/fresolver.h"

/usr/include/c++/4.4.7/bits/stl_deque.h(666): error: incomplete type is not allowed
        { return __deque_buf_size(sizeof(_Tp)); }
                                         ^
          detected during:
            instantiation of "size_t={unsigned long} std::deque<_Tp, _Alloc>::_S_buffer_size() [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 728 of "/usr/include/c++/4.4.7/bits/deque.tcc"
            instantiation of "void std::deque<_Tp, _Alloc>::_M_destroy_data_aux(std::deque<_Tp, _Alloc>::iterator, std::deque<_Tp, _Alloc>::iterator) [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 1653
            instantiation of "void std::deque<_Tp, _Alloc>::_M_destroy_data(std::deque<_Tp, _Alloc>::iterator, std::deque<_Tp, _Alloc>::iterator, const std::allocator<_Tp> &) [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 790
            instantiation of "std::deque<_Tp, _Alloc>::~deque() [with _Tp=boost::filesystem3::path, _Alloc=std::allocator<boost::filesystem3::path>]" at line 97 of "include/mitsuba/core/fresolver.h"
icc-o build/release/libcore/thread.os-c-O3-Wall-g-pipe-O3-ipo-no prec div-xSSE3-fp model fast=2-openmp-mfpmath=sse-march=nocona-fno-math errno-fomit帧指针-DMTS_调试-DSINGLE精度-DSPECTRUM_样本=3-DMTS_-sse-DMTS_具有一致性_RT-fopenmp-fvisibility=hidden-std-std-std-c++0x-wd2928-Qoption,cpp,--右值系数为非复制系数-fPIC-DMTS-BUILD-MODULE=MTS\u CORE-DMTS-HAS\u LIBPNG=1-DMTS-HAS\u LIBJPEG=1-I/usr/include/OpenEXR-I/u/I/n/ingrasi/eigen-I/usr/include/libcore/thread.cpp
/usr/include/c++/4.4.7/bits/stl_deque.h(450):错误:不允许不完整的类型
_M_impl._Tp_alloc_type::解除分配(_p,_deque_buf_size(sizeof(_Tp)));
^
在以下期间检测到:
在第553行实例化“void std::_Deque_base::_M_deallocate_node(_Tp*)[with _Tp=boost::filesystem3::path,_Alloc=std::allocator]”
在第476行实例化“void std::_Deque_base::_M_destroy_节点(_Tp**,_Tp**)[带_Tp=boost::filesystem3::path,_Alloc=std::allocator]”
在第790行实例化“std::_Deque_base::~_Deque_base()[with _Tp=boost::filesystem3::path,_Alloc=std::allocator]”
在“include/mitsuba/core/fresolver.h”的第97行实例化“std::deque::~deque()
/usr/include/c++/4.4.7/bits/stl_deque.h(1652):错误:不允许使用不完整的类类型
if(!\uuuu有\u平凡的\u析构函数(值\u类型))
^
在以下期间检测到:
在第790行实例化“void std::deque::_M_destroy_data(std::deque::iterator,std::deque::iterator,const std::allocator&)[使用_Tp=boost::filesystem3::path,_Alloc=std::allocator]”
在“include/mitsuba/core/fresolver.h”的第97行实例化“std::deque::~deque()
/usr/include/c++/4.4.7/bits/stl_deque.h(666):错误:不允许不完整的类型
{return u deque_buf_size(sizeof(_Tp));}
^
在以下期间检测到:
在“/usr/include/c++/4.4.7/bits/deque.tcc”的第728行实例化“size_t={unsigned long}std::deque::::_S_buffer_size()[with _Tp=boost::filesystem3::path,_Alloc=std::allocator]”
在第1653行实例化“void std::deque::_M_destroy_data_aux(std::deque::iterator,std::deque::iterator)[使用_Tp=boost::filesystem3::path,_Alloc=std::分配器]”
在第790行实例化“void std::deque::_M_destroy_data(std::deque::iterator,std::deque::iterator,const std::allocator&)[使用_Tp=boost::filesystem3::path,_Alloc=std::allocator]”
在“include/mitsuba/core/fresolver.h”的第97行实例化“std::deque::~deque()
我对模板有点陌生,但我认为这说明boost::filesystem3::path类型不完整。在检查boost/filesystem/path.hpp时,情况似乎并非如此

导致此问题的文件(fresolver.h):

#包括
#包括
#包括
#包括
...
类MTS\u导出\u核心文件解析程序:公共对象{
...
私人:
std::deque m_路径;
}
为什么编译失败,我如何修复它

#include <mitsuba/mitsuba.h>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <deque>

...

class MTS_EXPORT_CORE FileResolver : public Object {
    ...
private:
    std::deque<fs::path> m_paths;
}