view gcc/testsuite/g++.dg/template/show-template-tree-2.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
line wrap: on
line source

// Tests of -fdiagnostics-show-template-tree with variadic templates
// { dg-options "-fdiagnostics-show-template-tree -std=c++11" }

template<typename> struct vector {};
template<typename, typename> struct map {};
template<typename ... Types> struct var {};

void fn_0(var<>);
void fn_1(var<int>);
void fn_2(var<int, int>);
void fn_3(vector<var<> >);
void fn_4(vector<var<int> >);
void fn_5(vector<var<int, int> >);

void test_fn_0 ()
{
  fn_0 (var<> ());
  fn_0 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'var<>'" }
  /* { dg-begin-multiline-output "" }
  var<
    [int != ]>
     { dg-end-multiline-output "" } */
  fn_0 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'var<>'" }
  /* { dg-begin-multiline-output "" }
  var<
    [int, int != ]>
     { dg-end-multiline-output "" } */
  fn_0 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int> >' to 'var<>'" }
  fn_0 (vector<var<int, int> >());  // { dg-error "could not convert .* from 'vector<var<int, int> >' to 'var<>'" }
}

void test_fn_1 ()
{
  fn_1 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var<int>'" }
  /* { dg-begin-multiline-output "" }
  var<
    [ != int]>
     { dg-end-multiline-output "" } */
  fn_1 (var<int> ());
  fn_1 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'var<int>'" }
  /* { dg-begin-multiline-output "" }
  var<
    [int, int != int]>
     { dg-end-multiline-output "" } */
  fn_1 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int> >' to 'var<int>'" }
  fn_1 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int> >' to 'var<int>'" }
}

void test_fn_2 ()
{
  fn_2 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var<int, int>'" }
  /* { dg-begin-multiline-output "" }
  var<
    [ != int, int]>
     { dg-end-multiline-output "" } */
  fn_2 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'var<int, int>'" }
  /* { dg-begin-multiline-output "" }
  var<
    [int != int, int]>
     { dg-end-multiline-output "" } */
  fn_2 (var<int, int> ());
  fn_2 (vector<var<int> >()); // { dg-error "could not convert .* from 'vector<var<int> >' to 'var<int, int>'" }
  fn_2 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int> >' to 'var<int, int>'" }
}

void test_fn_3 ()
{
  fn_3 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'vector<var<> >'" }
  fn_3 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'vector<var<> >'" }
  fn_3 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'vector<var<> >'" }
  fn_3 (vector<var<> >());
  fn_3 (vector<var<int> >());  // { dg-error "could not convert .* from 'vector<var<int>>' to 'vector<var<>>'" }
  /* { dg-begin-multiline-output "" }
  vector<
    var<
      [int != ]>>
     { dg-end-multiline-output "" } */
  fn_3 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int>>' to 'vector<var<>>'" }
  /* { dg-begin-multiline-output "" }
  vector<
    var<
      [int, int != ]>>
     { dg-end-multiline-output "" } */
}

void test_fn_4 ()
{
  fn_4 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'vector<var<int> >'" }
  fn_4 (var<int> ()); // { dg-error "could not convert .* from 'var<int>' to 'vector<var<int> >'" }
  fn_4 (var<int, int> ()); // { dg-error "could not convert .* from 'var<int, int>' to 'vector<var<int> >'" }
  fn_4 (vector<var<> >()); // { dg-error "could not convert .* from 'vector<var<>>' to 'vector<var<int>>'" }
  /* { dg-begin-multiline-output "" }
  vector<
    var<
      [ != int]>>
     { dg-end-multiline-output "" } */
  fn_4 (vector<var<int> >()); 
  fn_4 (vector<var<int, int> >()); // { dg-error "could not convert .* from 'vector<var<int, int>>' to 'vector<var<int>>'" }
  /* { dg-begin-multiline-output "" }
  vector<
    var<
      [int, int != int]>>
     { dg-end-multiline-output "" } */
}

void test_fn_5 ()
{
  fn_5 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'vector<var<int, int> >'" }
  fn_5 (var<int> ());  // { dg-error "could not convert .* from 'var<int>' to 'vector<var<int, int> >'" }
  fn_5 (var<int, int> ());  // { dg-error "could not convert .* from 'var<int, int>' to 'vector<var<int, int> >'" }
  fn_5 (vector<var<int> >());  // { dg-error "could not convert .* from 'vector<var<int>>' to 'vector<var<int, int>>'" }
  /* { dg-begin-multiline-output "" }
  vector<
    var<
      [int != int, int]>>
     { dg-end-multiline-output "" } */
  fn_5 (vector<var<int, int> >());
}