1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 369d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor 469d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortemplate<typename T, typename U> 569d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregorstruct is_same { 669d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor static const bool value = false; 769d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor}; 869d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor 969d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortemplate<typename T> 1069d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregorstruct is_same<T, T> { 1169d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor static const bool value = true; 1269d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor}; 1369d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor#define JOIN2(X,Y) X##Y 1469d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor#define JOIN(X,Y) JOIN2(X,Y) 1569d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor#define CHECK_EQUAL_TYPES(T1, T2) \ 1669d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor int JOIN(array,__LINE__)[is_same<T1, T2>::value? 1 : -1] 1769d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor 1869d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregorint i; 1969d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortypedef int& LRI; 2069d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortypedef int&& RRI; 2169d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor 2269d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortypedef LRI& r1; CHECK_EQUAL_TYPES(r1, int&); 2369d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortypedef const LRI& r2; CHECK_EQUAL_TYPES(r2, int&); 2469d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortypedef const LRI&& r3; CHECK_EQUAL_TYPES(r3, int&); 2569d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregor 2669d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortypedef RRI& r4; CHECK_EQUAL_TYPES(r4, int&); 2769d831645f429d3b806d2ae220aee45ca44f8c6cDouglas Gregortypedef RRI&& r5; CHECK_EQUAL_TYPES(r5, int&&); 28