在concepts的設計中存在的最大的困難是維持模板的靈活性,因此我們不要求模板實參適合于類層次結構或要求所有操作都能夠通過虛函數進行訪問(就象Java和C#的泛型所做的那樣)。在這些語言的泛型中,實參的類型必須是派生自泛型定義中指定的接口(在C++中類似于接口的是抽象類)。這意味著所有的泛型實參都必須適合于某個類層次結構。這將要求部分開發人員在設計的時候就做一些不合理的預設,從而為他們強加一些不必要的約束。例如,如果你編寫了一個泛型類,而我又定義了一個類,只有在我知道你指定的接口、并將我的類從該接口派生的情況下,人們才可以將我的類用作這個泛型類的實參。這種限制太過嚴格。
當然對于這種問題總有解決辦法,但那會使代碼變得復雜化。另一個問題是我們不能直接在泛型中使用內建類型。因為內建類型(例如int)并不是類,也就沒有泛型中指定接口所要求的函數——這時候你必須為這些內建類型做一個包裝器類,然后通過指針來間接地訪問它們。另外,在泛型上的典型操作會被實現為一個虛函數調用。那樣的代價可能相當高(相對于僅僅使用簡單的內建操作來說,比如+或者<)。以這種方式來實現的泛型,只不過是抽象類的“語法糖”。