gcc4.9不能使用msvc140调用正确的模板函数专业化,但工作正常

时间:2019-02-10 16:06:26

标签: c++ boost

我正在实施一个新的boost :: archive,并且我需要对集​​合进行特殊处理。 因此,我为 boost :: serialization :: stl :: save_collection boost :: serialization :: load / save_map_collection 创建了模板专业化,所有实现都是内联的

使用msvc14,一切正常。

使用gcc49,它始终是 boost :: serialization :: stl :: save_collection 的原始boost实现。

boost :: serialization :: load / save_map_collection 可以在gcc49上正常工作,并且使用了我的专业化技术。

这是我的声明:

    # pragma once
    #include <boost/config.hpp>
    #include <boost/serialization/nvp.hpp>
    #include <boost/serialization/serialization.hpp>
    #include <boost/serialization/version.hpp>
    #include <boost/serialization/collection_size_type.hpp>
    #include <boost/serialization/item_version_type.hpp>

    namespace boost{
    namespace serialization {
    namespace stl {

    //////////////////////////////////////////////////////////////////////
    // implementation of serialization for STL containers
    //

    template</*class Archive,*/ class Container>
    inline void save_collection(
        ::boost::archive::my_oarchive & ar,
        const Container &s,
        collection_size_type count)
    {
    .....
    }

    template</*class Archive,*/ class Container>
    inline void save_collection(::boost::archive::my_oarchive & ar, const Container &s)
    {
        // record number of elements
        collection_size_type count(s.size());
        save_collection(ar, s, count);
    }

    } // namespace stl 
    } // namespace serialization
    } // namespace boost

我已经按照包含顺序进行操作,并删除了#pragma一次,但仍然没有成功!

有什么想法吗?

0 个答案:

没有答案