blob: eccb5934c3ed942b73e5b46e3f326b89261d5310 [file] [log] [blame]
Howard Hinnant3e519522010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnant5b08a8a2010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnant3e519522010-05-11 19:42:16 +00004//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <functional>
11
12// template <class T>
13// struct hash
14// : public unary_function<T, size_t>
15// {
16// size_t operator()(T val) const;
17// };
18
19// Not very portable
20
21#include <string>
22#include <cassert>
23#include <type_traits>
24
25template <class T>
26void
27test()
28{
29 typedef std::hash<T> H;
30 static_assert((std::is_base_of<std::unary_function<T, std::size_t>,
31 H>::value), "");
32 H h;
33 std::string g1 = "1234567890";
34 std::string g2 = "1234567891";
35 T s1(g1.begin(), g1.end());
36 T s2(g2.begin(), g2.end());
37 assert(h(s1) != h(s2));
38}
39
40int main()
41{
42 test<std::string>();
43#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
44 test<std::u16string>();
45 test<std::u32string>();
Howard Hinnantbf2897c2010-08-22 00:47:54 +000046#endif // _LIBCPP_HAS_NO_UNICODE_CHARS
Howard Hinnant3e519522010-05-11 19:42:16 +000047 test<std::wstring>();
48}