2015-09-23 29 views
0

我很好奇,如果有可能編寫這樣的C++模板,它不可能創建一個類/類型它將接受(編譯沒有錯誤)。 如果可能,它可能是什麼?是否可以編寫不接受任何類型的C++模板?

+0

爲什麼你想要這樣做? – wallyk

+0

我知道這將是最無用的模板。我只是好奇,如果有可能的話。 – Barteks2x

+0

它在編譯器測試中可能很有用。在編譯識別突變病例之前,它也可能在軟件配置中有用。我想知道你是否在做這樣的事情。 – wallyk

回答

2

當然。例如:

template <typename T> 
struct S { 
    static_assert(std::is_class<T>::value, "T must be a class"); 
    static_assert(!std::is_class<T>::value, "T must not be a class"); 
}; 

但是,這樣的模板會自動形成不規則的NDR。

如果可以 爲模板來產生沒有有效的專門化,並且該模板不會被實例化,是形成不良的模板,不需要診斷 。

([temp.res/8),你可以做到這一點

1

一種方式是隻提供類模板的前向聲明。過去我使用的類模板的一個例子是將類型的大小作爲編譯器錯誤進行打印。

template <size_t> struct PrintSize; 

PrintSize<sizeof(int)> a; 

當您編譯代碼,你將能夠從編譯器發出錯誤消息告訴int大小。

相關問題