2013-03-11 15 views
4

以下是什麼結果?它是不合格的,未定義的行爲還是定義良好的?pointer_traits爲既不是X <A, T...>也不提供成員typedef element_type的類型提供了什麼?

struct A {}; 
std::pointer_traits<A> x; 

我問的原因是因爲我想知道好奇心,並且因爲我想知道任意類型是否是指針。與此同時我也意味着包括shared_ptr和朋友。我想知道是否有類型特徵(謂詞),或者如果不是,我是否可以使用pointer_traits並檢測是否聲明瞭element_type。

回答

5

它說,它是形成不良的從20.6.3p1,因爲它沒有element_type而不是類模板實例

類型定義見下文ELEMENT_TYPE;

類型:Ptr :: element_type如果這樣的 類型存在;否則,T如果Ptr是 的類模板實例化SomePointer<T, Args>,其中Args是0或更多類型 自變量; 否則,專業化不健全

+0

謝謝。你知道什麼是最好的方式來查詢某種類型是否「指針」? – 2013-03-11 22:02:25

+1

@Johannes:定義「像指針一樣」。你可以通過表達式SFINAE創建某種概念。 – Xeo 2013-03-11 22:05:20

+0

檢查是否存在'element_type'會得到標準的「類指針類型」,但由於形式爲'SomePointer '的任何東西也是可以接受的,所以我不確定(標準似乎也沒有明確說明「指針類型「意味着AFAICT)。 – 2013-03-11 22:07:02

相關問題