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