difference_type.pass.cpp revision c52f43e72dfcea03037729649da84c23b3beb04a
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// <memory>
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// template <class Ptr>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// struct pointer_traits
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     typedef <details> difference_type;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     ...
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// };
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <memory>
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <type_traits>
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct A
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef short element_type;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef char difference_type;
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct B
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef short element_type;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T>
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct C {};
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T>
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct D
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef char difference_type;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_assert((std::is_same<std::pointer_traits<A>::difference_type, char>::value), "");
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_assert((std::is_same<std::pointer_traits<B>::difference_type, std::ptrdiff_t>::value), "");
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    static_assert((std::is_same<std::pointer_traits<C<double> >::difference_type, std::ptrdiff_t>::value), "");
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    static_assert((std::is_same<std::pointer_traits<D<int> >::difference_type, char>::value), "");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)