2013-08-03 105 views
2

我試圖將this question的最佳答案放到我自己的項目中,並且無法讓gcc編譯它(在RHEL linux上使用「-std = GNU ++ 0X「)。我已經做了一些改動到原來的代碼,這樣我的結束如下:GCC 4.4.7無法從初始化列表轉換爲std :: array

#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給出了「中」的「迴歸」線以下錯誤:

error: could not convert '{{arg0, args#0, args#1}}' to 'std::array<int, 3u>' 

任何人都可以揭示這是爲什麼任何光請?

我之前沒有在C++ 11中做過多的工作,所以我在試圖找出問題時有點失落。 我已經在「args」位周圍嘗試了不同數量的{},但目前爲止無濟於事。

感謝您提供任何幫助。

回答

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)) {} 
} 
找到
相關問題