首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::variant或std::variant别名不可编译

boost::variant或std::variant别名不可编译
EN

Stack Overflow用户
提问于 2018-01-21 04:52:11
回答 1查看 310关注 0票数 1

目前我的库使用boost::optional和boost::variant。由于C++17已推出,我想添加一个选项,即它可以与boost和std一起工作。

所以我用boost optional and variant和std optional and variant成功测试了完整的代码。

所以我添加了一个类似下面这样的头文件:

代码语言:javascript
复制
#ifdef USE_BOOST
#include <boost/optional.hpp>
#elif USE_STD
#include <optional>
#endif

namespace Foo {

#ifdef USE_BOOST
template <typename T>
using optional = boost::optional<T>
#elif USE_STD
template <typename T>
using optional = std::optional<T>
#endif

}

一切都还能正常工作。

然后我为variant添加了类似的东西

代码语言:javascript
复制
#ifdef USE_BOOST
#include <boost/variant.hpp>
#elif USE_STD
#include <variant>
#endif

namespace Foo {

#ifdef USE_BOOST
template <typename... T>
using variant = boost::variant<T...>
// similar to the following
#elif USE_STD

template <typename...T>
using variant = std::variant<T...>;

template <class T, class... Types>
constexpr T& get(std::variant<Types...>& v) {
    return std::get<T>(v);
};

template <class T, class... Types>
constexpr T&& get(std::variant<Types...>&& v) {
    return std::get<T>(std::move(v));
};

template <class T, class... Types>
constexpr const T& get(const std::variant<Types...>& v) {
    return std::get<T>(v);
};

template <class T, class... Types>
constexpr const T&& get(const std::variant<Types...>&& v) {
    return std::get<T>(std::move(v));
};

#endif

}

在这个库中,我现在到处都在使用Foo::optional和Foo::variant。但是现在所有的函数模板,比如

代码语言:javascript
复制
template <typename... Args>
bool bar(const std::tuple<variant<Args,
                                  std::exception_ptr>...>& args)

已经找不到了。(clang错误消息:没有匹配的函数用于调用...)

测试了clang trunk和VS 2017 15.6.1预览有什么想法吗?

首先要感谢大家!

编辑:在我的gist中有一个最小的例子

EN

回答 1

Stack Overflow用户

发布于 2018-01-22 06:00:37

问题终于解决了。这是clang an VS中的一个bug。GCC把它编译得很好。clang和VS的解决方案是使用显式模板参数调用函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48360986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档