我正在尝试将this question的最高答案放入我自己的项目中,并且无法使用gcc编译它(在RHEL linux上使用“-std = gnu ++ 0x”)。我已经对原始代码进行了一些更改,因此我的结果如下:
#include <string>
#include <vector>
#include <fstream>
#include <cerrno>
#include <cstring>
#include <array>
#include <algorithm>
template <typename T0, typename T1, size_t N> bool operator *(const T0& lhs, const std::array<T1, N>& rhs)
{
return std::find(rhs.begin(), rhs.end(), lhs) != rhs.end();
}
template <class T0, class...T> std::array<T0, 1+sizeof...(T)> in(T0 arg0, T...args)
{
return {{arg0, args...}};
}
其中一些包含不相关,我只是展示所有这些内容供您查看。我正在使用这样的函数:
if (1 *in(1,2,3))
编译时,gcc在“in”的“return”行中给出以下错误:
error: could not convert '{{arg0, args#0, args#1}}' to 'std::array<int, 3u>'
有人能说清楚为什么会这样吗?
我以前在C ++ 11中做的不多,所以在尝试找出错误时我有点迷失。 我已尝试围绕“args”位使用不同数量的{},但到目前为止无济于事。
感谢您提供任何帮助。
答案 0 :(得分:3)
问题是您使用的是旧版本的GCC,它不完全支持C ++ 11。更新到GCC 4.8.x并且您的代码将编译得很好。
以下代码的实时版本可在ideone
上找到#include <array>
#include <algorithm>
template <typename T0, typename T1, size_t N>
bool operator *(const T0& lhs, const std::array<T1, N>& rhs)
{
return std::find(rhs.begin(), rhs.end(), lhs) != rhs.end();
}
template <class T0, class...T>
std::array<T0, 1 + sizeof...(T)> in(T0 arg0, T...args)
{
return { {arg0, args...} };
}
int main()
{
if (1 * in(1, 2, 3)) {}
}