1*99451b44SJordan Rupprecht //===-- main.cpp ------------------------------------------------*- C++ -*-===// 2*99451b44SJordan Rupprecht // 3*99451b44SJordan Rupprecht // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*99451b44SJordan Rupprecht // See https://llvm.org/LICENSE.txt for license information. 5*99451b44SJordan Rupprecht // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*99451b44SJordan Rupprecht // 7*99451b44SJordan Rupprecht //===----------------------------------------------------------------------===// 8*99451b44SJordan Rupprecht 9*99451b44SJordan Rupprecht template <class T, int... Args> struct C { 10*99451b44SJordan Rupprecht T member; 11*99451b44SJordan Rupprecht bool isSixteenThirtyTwo() { return false; } 12*99451b44SJordan Rupprecht }; 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprecht template <> struct C<int, 16> { 15*99451b44SJordan Rupprecht int member; 16*99451b44SJordan Rupprecht bool isSixteenThirtyTwo() { return false; } 17*99451b44SJordan Rupprecht }; 18*99451b44SJordan Rupprecht 19*99451b44SJordan Rupprecht template <> struct C<int, 16, 32> : C<int, 16> { 20*99451b44SJordan Rupprecht bool isSixteenThirtyTwo() { return true; } 21*99451b44SJordan Rupprecht }; 22*99451b44SJordan Rupprecht 23*99451b44SJordan Rupprecht template <class T, typename... Args> struct D { 24*99451b44SJordan Rupprecht T member; 25*99451b44SJordan Rupprecht bool isIntBool() { return false; } 26*99451b44SJordan Rupprecht }; 27*99451b44SJordan Rupprecht 28*99451b44SJordan Rupprecht template <> struct D<int, int> { 29*99451b44SJordan Rupprecht int member; 30*99451b44SJordan Rupprecht bool isIntBool() { return false; } 31*99451b44SJordan Rupprecht }; 32*99451b44SJordan Rupprecht 33*99451b44SJordan Rupprecht template <> struct D<int, int, bool> : D<int, int> { 34*99451b44SJordan Rupprecht bool isIntBool() { return true; } 35*99451b44SJordan Rupprecht }; 36*99451b44SJordan Rupprecht 37*99451b44SJordan Rupprecht int main (int argc, char const *argv[]) 38*99451b44SJordan Rupprecht { 39*99451b44SJordan Rupprecht C<int,16,32> myC; 40*99451b44SJordan Rupprecht C<int,16> myLesserC; 41*99451b44SJordan Rupprecht myC.member = 64; 42*99451b44SJordan Rupprecht (void)C<int,16,32>().isSixteenThirtyTwo(); 43*99451b44SJordan Rupprecht (void)C<int,16>().isSixteenThirtyTwo(); 44*99451b44SJordan Rupprecht (void)(myC.member != 64); //% self.expect("expression -- myC", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["64"]) 45*99451b44SJordan Rupprecht //% self.expect("expression -- myLesserC.isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"]) 46*99451b44SJordan Rupprecht //% self.expect("expression -- myC.isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"]) 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht // Disabling until we do template lookup correctly: http://lists.llvm.org/pipermail/lldb-commits/Week-of-Mon-20180507/040689.html 49*99451b44SJordan Rupprecht //#% self.expect("expression -- C<int, 16>().isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"]) 50*99451b44SJordan Rupprecht //#% self.expect("expression -- C<int, 16, 32>().isSixteenThirtyTwo()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"]) 51*99451b44SJordan Rupprecht 52*99451b44SJordan Rupprecht D<int,int,bool> myD; 53*99451b44SJordan Rupprecht D<int,int> myLesserD; 54*99451b44SJordan Rupprecht myD.member = 64; 55*99451b44SJordan Rupprecht (void)D<int,int,bool>().isIntBool(); 56*99451b44SJordan Rupprecht (void)D<int,int>().isIntBool(); 57*99451b44SJordan Rupprecht return myD.member != 64; //% self.expect("expression -- myD", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["64"]) 58*99451b44SJordan Rupprecht //% self.expect("expression -- myLesserD.isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"]) 59*99451b44SJordan Rupprecht //% self.expect("expression -- myD.isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"]) 60*99451b44SJordan Rupprecht 61*99451b44SJordan Rupprecht // See comment above. 62*99451b44SJordan Rupprecht //#% self.expect("expression -- D<int, int>().isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["false"]) 63*99451b44SJordan Rupprecht //#% self.expect("expression -- D<int, int, bool>().isIntBool()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["true"]) 64*99451b44SJordan Rupprecht } 65