2012-10-18 19 views
3

下面的函數,toArray,也許有一天轉換爲C++ 11 std::tuple成C++ 11 std::arrayC++ 11的std ::元組到std ::數組轉換導致可變參數模板崩潰

#include <tuple> 
#include <array> 

template <typename T, typename ...U> 
std::array<T,sizeof...(U)> 
toArray(std::tuple<U...>) { 
    return std::array<T,sizeof...(U)>(); 
} 

如果我嘗試用以下代碼調用toArray,那麼在G ++ 4.8下,我可以成功編譯。但是,使用Clang ++ 3.2進行編譯會使Clang前端崩潰。我的代碼是否有效C++?

int main(int argc, char *argv[]) 
{ 
    auto tup = std::make_tuple(1,2,3,4,5,6,7,8); 
    toArray<int>(tup); 
    return 0; 
} 
+0

看起來不錯。我認爲這是一個錯誤。如果是這樣,你應該報告它。 –

+10

即使它無效,它也不會使編譯器崩潰。 :)爲此提出一個錯誤。 – GManNickG

+0

@GManNickG:同意:現在正在處理。 – user2023370

回答

1

它看起來有效的給我,漢化版正常工作與G ++:

#include < redi/index_tuple.h > 
template <typename T, typename... U, unsigned... N> 
    std::array<T, sizeof...(U)> 
    toArray2(std::tuple<U...>& t, redi::index_tuple<N...>) { 
    return std::array<T, sizeof...(U)>{{ std::get<N>(t)... }}; 
    } 

template <typename T, typename ...U> 
    std::array<T, sizeof...(U)> 
    toArray(std::tuple<U...> t) { 
    return toArray2<T>(t, redi::to_index_tuple<U...>{}); 
    } 

int main() 
{ 
    auto tup = std::make_tuple(1,2,3,4,5,6,7,8); 
    return toArray<int>(tup)[3] - 4; 
} 
相關問題