// Tests of -fdiagnostics-show-template-tree with variadic templates // { dg-options "-fdiagnostics-show-template-tree -std=c++11" } template struct vector {}; template struct map {}; template struct var {}; void fn_0(var<>); void fn_1(var); void fn_2(var); void fn_3(vector >); void fn_4(vector >); void fn_5(vector >); void test_fn_0 () { fn_0 (var<> ()); fn_0 (var ()); // { dg-error "could not convert .* from 'var' to 'var<>'" } /* { dg-begin-multiline-output "" } var< [int != ]> { dg-end-multiline-output "" } */ fn_0 (var ()); // { dg-error "could not convert .* from 'var' to 'var<>'" } /* { dg-begin-multiline-output "" } var< [int, int != ]> { dg-end-multiline-output "" } */ fn_0 (vector >()); // { dg-error "could not convert .* from 'vector >' to 'var<>'" } fn_0 (vector >()); // { dg-error "could not convert .* from 'vector >' to 'var<>'" } } void test_fn_1 () { fn_1 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var'" } /* { dg-begin-multiline-output "" } var< [ != int]> { dg-end-multiline-output "" } */ fn_1 (var ()); fn_1 (var ()); // { dg-error "could not convert .* from 'var' to 'var'" } /* { dg-begin-multiline-output "" } var< [int, int != int]> { dg-end-multiline-output "" } */ fn_1 (vector >()); // { dg-error "could not convert .* from 'vector >' to 'var'" } fn_1 (vector >()); // { dg-error "could not convert .* from 'vector >' to 'var'" } } void test_fn_2 () { fn_2 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'var'" } /* { dg-begin-multiline-output "" } var< [ != int, int]> { dg-end-multiline-output "" } */ fn_2 (var ()); // { dg-error "could not convert .* from 'var' to 'var'" } /* { dg-begin-multiline-output "" } var< [int != int, int]> { dg-end-multiline-output "" } */ fn_2 (var ()); fn_2 (vector >()); // { dg-error "could not convert .* from 'vector >' to 'var'" } fn_2 (vector >()); // { dg-error "could not convert .* from 'vector >' to 'var'" } } void test_fn_3 () { fn_3 (var<> ()); // { dg-error "could not convert .* from 'var<>' to 'vector >'" } fn_3 (var ()); // { dg-error "could not convert .* from 'var' to 'vector >'" } fn_3 (var ()); // { dg-error "could not convert .* from 'var' to 'vector >'" } fn_3 (vector >()); fn_3 (vector >()); // { dg-error "could not convert .* from 'vector>' to 'vector>'" } /* { dg-begin-multiline-output "" } vector< var< [int != ]>> { dg-end-multiline-output "" } */ fn_3 (vector >()); // { dg-error "could not convert .* from 'vector>' to 'vector>'" } /* { 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 >'" } fn_4 (var ()); // { dg-error "could not convert .* from 'var' to 'vector >'" } fn_4 (var ()); // { dg-error "could not convert .* from 'var' to 'vector >'" } fn_4 (vector >()); // { dg-error "could not convert .* from 'vector>' to 'vector>'" } /* { dg-begin-multiline-output "" } vector< var< [ != int]>> { dg-end-multiline-output "" } */ fn_4 (vector >()); fn_4 (vector >()); // { dg-error "could not convert .* from 'vector>' to 'vector>'" } /* { 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 >'" } fn_5 (var ()); // { dg-error "could not convert .* from 'var' to 'vector >'" } fn_5 (var ()); // { dg-error "could not convert .* from 'var' to 'vector >'" } fn_5 (vector >()); // { dg-error "could not convert .* from 'vector>' to 'vector>'" } /* { dg-begin-multiline-output "" } vector< var< [int != int, int]>> { dg-end-multiline-output "" } */ fn_5 (vector >()); }