element_type.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
15a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org//===----------------------------------------------------------------------===// 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// The LLVM Compiler Infrastructure 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 5e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org// This file is distributed under the University of Illinois Open Source 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// License. See LICENSE.TXT for details. 777ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.org// 8e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org//===----------------------------------------------------------------------===// 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// <memory> 1193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org 129dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// template <class Ptr> 13196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// struct pointer_traits 14196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// { 154b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org// typedef <details> element_type; 164b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org// ... 174b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org// }; 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 19303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org#include <memory> 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include <type_traits> 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.orgstruct A 23378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org{ 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen typedef char element_type; 25236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org}; 26b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 27b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgtemplate <class T> 28b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgstruct B 29236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org{ 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen typedef char element_type; 31ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}; 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgtemplate <class T> 3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstruct C 35c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org{ 36ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}; 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.orgtemplate <class T, class U> 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstruct D 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{ 4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 42378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org 43378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.orgint main() 44378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org{ 4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static_assert((std::is_same<std::pointer_traits<A>::element_type, char>::value), ""); 4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static_assert((std::is_same<std::pointer_traits<B<int> >::element_type, char>::value), ""); 4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static_assert((std::is_same<std::pointer_traits<C<int> >::element_type, int>::value), ""); 48a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org static_assert((std::is_same<std::pointer_traits<D<double, int> >::element_type, double>::value), ""); 49160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org} 50a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org