| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 
 | //===-- main.cpp ------------------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LIDENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
template <class T, int... Args> struct C {
  T member;
  bool isSixteenThirtyTwo() { return false; }
};
template <> struct C<int, 16> {
  int member;
  bool isSixteenThirtyTwo() { return false; }
};
template <> struct C<int, 16, 32> : C<int, 16> {
  bool isSixteenThirtyTwo() { return true; }
};
template <class T, typename... Args> struct D {
  T member;
  bool isIntBool() { return false; }
};
template <> struct D<int, int> {
  int member;
  bool isIntBool() { return false; }
};
template <> struct D<int, int, bool> : D<int, int> {
  bool isIntBool() { return true; }
};
int main (int argc, char const *argv[])
{
    C<int,16,32> myC;
    C<int,16> myLesserC;
    myC.member = 64;
    (void)C<int,16,32>().isSixteenThirtyTwo();
    (void)C<int,16>().isSixteenThirtyTwo();
    (void)(myC.member != 64);   //% self.expect("expression -- myC", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["64"])
                                //% self.expect("expression -- C<int, 16>().isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"])
                                //% self.expect("expression -- C<int, 16, 32>().isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"])
                                //% self.expect("expression -- myLesserC.isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"])
                                //% self.expect("expression -- myC.isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"])
   
    D<int,int,bool> myD;
    D<int,int> myLesserD;
    myD.member = 64;
    (void)D<int,int,bool>().isIntBool();
    (void)D<int,int>().isIntBool();
    return myD.member != 64;	//% self.expect("expression -- myD", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["64"])
                                //% self.expect("expression -- D<int, int>().isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"])
                                //% self.expect("expression -- D<int, int, bool>().isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"])
                                //% self.expect("expression -- myLesserD.isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"])
                                //% self.expect("expression -- myD.isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"])
}
 |