Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/cpp2a/concepts.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line source
// { dg-do compile { target c++2a } } // Change in grammar for the expression trailing `requires`. template<typename T> requires true != false // { dg-error "must be enclosed" } void f1(T) { } template<typename T> void f3(T) requires true != false // { dg-error "must be enclosed" } { } template<typename T> requires requires { requires true == false; // OK: logical-or-expressions allowed here. } void f3(T) { } template<typename T> concept bool C1 = true; // { dg-error "bool" } template<typename T> bool concept C2 = true; // { dg-error "concept definition syntax" } template<typename T> concept C3 = true; // OK template<typename T> concept C3 = true; // { dg-error "redefinition" } template<typename T, typename U> concept C3 = true; // { dg-error "different template parameters" } template<int> concept C3 = true; // { dg-error "different template parameters" } int C3 = 0; // { dg-error "different kind of entity" } int C4 = 0; template<typename T> concept C4 = true; // { dg-error "different kind of entity" } // Concepts as expressions template<typename T> concept True = true; template<typename T> concept False = false; static_assert(True<int>); static_assert(False<int>); // { dg-error "static assertion failed" } void f4(True auto); template<True T> concept C5 = true; // { dg-error "cannot be constrained" } template<typename T> concept Recursive = Recursive<T>; // { dg-error "not declared|expected" }