17112dae6acac544a0271a85d95342c583441e2d1Dan Albert//===----------------------------------------------------------------------===// 27112dae6acac544a0271a85d95342c583441e2d1Dan Albert// 37112dae6acac544a0271a85d95342c583441e2d1Dan Albert// The LLVM Compiler Infrastructure 47112dae6acac544a0271a85d95342c583441e2d1Dan Albert// 57112dae6acac544a0271a85d95342c583441e2d1Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 67112dae6acac544a0271a85d95342c583441e2d1Dan Albert// Source Licenses. See LICENSE.TXT for details. 77112dae6acac544a0271a85d95342c583441e2d1Dan Albert// 87112dae6acac544a0271a85d95342c583441e2d1Dan Albert//===----------------------------------------------------------------------===// 97112dae6acac544a0271a85d95342c583441e2d1Dan Albert 107112dae6acac544a0271a85d95342c583441e2d1Dan Albert// <functional> 117112dae6acac544a0271a85d95342c583441e2d1Dan Albert 127112dae6acac544a0271a85d95342c583441e2d1Dan Albert// template <class T> 137112dae6acac544a0271a85d95342c583441e2d1Dan Albert// struct hash 147112dae6acac544a0271a85d95342c583441e2d1Dan Albert// : public unary_function<T, size_t> 157112dae6acac544a0271a85d95342c583441e2d1Dan Albert// { 167112dae6acac544a0271a85d95342c583441e2d1Dan Albert// size_t operator()(T val) const; 177112dae6acac544a0271a85d95342c583441e2d1Dan Albert// }; 187112dae6acac544a0271a85d95342c583441e2d1Dan Albert 197112dae6acac544a0271a85d95342c583441e2d1Dan Albert// Not very portable 207112dae6acac544a0271a85d95342c583441e2d1Dan Albert 217112dae6acac544a0271a85d95342c583441e2d1Dan Albert#include <experimental/string_view> 227112dae6acac544a0271a85d95342c583441e2d1Dan Albert#include <cassert> 237112dae6acac544a0271a85d95342c583441e2d1Dan Albert#include <type_traits> 247112dae6acac544a0271a85d95342c583441e2d1Dan Albert 257112dae6acac544a0271a85d95342c583441e2d1Dan Albertusing std::experimental::string_view; 267112dae6acac544a0271a85d95342c583441e2d1Dan Albert 277112dae6acac544a0271a85d95342c583441e2d1Dan Alberttemplate <class T> 287112dae6acac544a0271a85d95342c583441e2d1Dan Albertvoid 297112dae6acac544a0271a85d95342c583441e2d1Dan Alberttest() 307112dae6acac544a0271a85d95342c583441e2d1Dan Albert{ 317112dae6acac544a0271a85d95342c583441e2d1Dan Albert typedef std::hash<T> H; 324dc5b2198d1aa4ab585a3d4a87ee9626d681f9f7Dan Albert static_assert((std::is_same<typename H::argument_type, T>::value), "" ); 334dc5b2198d1aa4ab585a3d4a87ee9626d681f9f7Dan Albert static_assert((std::is_same<typename H::result_type, std::size_t>::value), "" ); 347112dae6acac544a0271a85d95342c583441e2d1Dan Albert H h; 357112dae6acac544a0271a85d95342c583441e2d1Dan Albert// std::string g1 = "1234567890"; 367112dae6acac544a0271a85d95342c583441e2d1Dan Albert// std::string g2 = "1234567891"; 377112dae6acac544a0271a85d95342c583441e2d1Dan Albert typedef typename T::value_type char_type; 387112dae6acac544a0271a85d95342c583441e2d1Dan Albert char_type g1 [ 10 ]; 397112dae6acac544a0271a85d95342c583441e2d1Dan Albert char_type g2 [ 10 ]; 407112dae6acac544a0271a85d95342c583441e2d1Dan Albert for ( int i = 0; i < 10; ++i ) 417112dae6acac544a0271a85d95342c583441e2d1Dan Albert g1[i] = g2[9-i] = '0' + i; 427112dae6acac544a0271a85d95342c583441e2d1Dan Albert T s1(g1, 10); 437112dae6acac544a0271a85d95342c583441e2d1Dan Albert T s2(g2, 10); 447112dae6acac544a0271a85d95342c583441e2d1Dan Albert assert(h(s1) != h(s2)); 457112dae6acac544a0271a85d95342c583441e2d1Dan Albert} 467112dae6acac544a0271a85d95342c583441e2d1Dan Albert 477112dae6acac544a0271a85d95342c583441e2d1Dan Albertint main() 487112dae6acac544a0271a85d95342c583441e2d1Dan Albert{ 497112dae6acac544a0271a85d95342c583441e2d1Dan Albert test<std::experimental::string_view>(); 507112dae6acac544a0271a85d95342c583441e2d1Dan Albert#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS 517112dae6acac544a0271a85d95342c583441e2d1Dan Albert test<std::experimental::u16string_view>(); 527112dae6acac544a0271a85d95342c583441e2d1Dan Albert test<std::experimental::u32string_view>(); 537112dae6acac544a0271a85d95342c583441e2d1Dan Albert#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 547112dae6acac544a0271a85d95342c583441e2d1Dan Albert test<std::experimental::wstring_view>(); 557112dae6acac544a0271a85d95342c583441e2d1Dan Albert} 56