2015-12-22 91 views
4

爲什麼我不能在函數中聲明模板類型別名?爲什麼我不能在函數內聲明模板類型別名?

#include <vector> 

int main(){ 

    //type alias deceleration: 
    template <typename T> 
    using type = std::vector<T>; 

    //type instantiation: 
    type<int> t; 

} 

error: a template declaration cannot appear at block scope

爲什麼我們被迫把這些聲明塊範圍之外?

#include <vector> 

//type alias deceleration: 
template <typename T> 
using type = std::vector<T>; 

int main(){ 

    //type instantiation: 
    type<int> t; 
} 
+0

你可以* *的函數內聲明的類型別名。你有什麼是模板別名。 – user2079303

+0

@ user2079303正確。調整的問題。 –

+1

鑑於目前的答案,「標準如此說」,你能否澄清問題是「爲什麼它決定不允許這個問題?」,這是我最初的看法。 – BoBTFish

回答

4

該標準如此說。

從C++ 11標準(重點煤礦):

14 Template

2 A template-declaration can appear only as a namespace scope or class scope declaration. In a function template declaration, the last component of the declarator-id shall not be a template-id. [ Note: That last component may be an identifier, an operator-function-id, a conversion-function-id, or a literal-operator-id. In a class template declaration, if the class name is a simple-template-id, the declaration declares a class template partial specialization (14.5.5). —end note ]

相關問題