Skip to content

Structure error references in range [C2981, C3010] #5652

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions docs/error-messages/compiler-errors-2/compiler-error-c2988.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
---
description: "Learn more about: Compiler Error C2988"
title: "Compiler Error C2988"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2988"
ms.date: 11/04/2016
f1_keywords: ["C2988"]
helpviewer_keywords: ["C2988"]
ms.assetid: c07ada8d-7cdf-4496-8656-cc3851e76b46
---
# Compiler Error C2988

unrecognizable template declaration/definition
> unrecognizable template declaration/definition

## Remarks

The template declaration does not parse correctly. Check delimiters.
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c2989.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C2989"
title: "Compiler Error C2989"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2989"
ms.date: 11/04/2016
f1_keywords: ["C2989"]
helpviewer_keywords: ["C2989"]
ms.assetid: 936303d8-eb3b-4746-82ec-2f18020a6f64
---
# Compiler Error C2989

'class' : class type has already been declared as a non-class type
> 'class' : class type has already been declared as a non-class type

## Remarks

The class generic or template redefines a non-template or non-generic class. Check header files for conflicts.

The following sample generates C2989:
## Examples

The following example generates C2989:

```cpp
// C2989.cpp
Expand Down
15 changes: 9 additions & 6 deletions docs/error-messages/compiler-errors-2/compiler-error-c2990.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C2990"
title: "Compiler Error C2990"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2990"
ms.date: 11/04/2016
f1_keywords: ["C2990"]
helpviewer_keywords: ["C2990"]
ms.assetid: 674e9f6a-6743-4af0-a7ed-cbe11103a2f8
---
# Compiler Error C2990

'class' : non-class type as already been declared as a class type
> 'class' : non-class type as already been declared as a class type

## Remarks

The non generic or template class redefines a generic or template class. Check header files for conflicts.

The following sample generates C2990:
## Examples

The following example generates C2990:

```cpp
// C2990.cpp
Expand All @@ -35,7 +38,7 @@ ref struct GC {}; // C2990

C2990 can also occur due to a breaking change in the Microsoft C++ compiler for Visual Studio 2005; the compiler now requires that multiple declarations for the same type be identical with respect to template specification.

The following sample generates C2990:
The following example generates C2990:

```cpp
// C2990c.cpp
Expand Down
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c2991.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C2991"
title: "Compiler Error C2991"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2991"
ms.date: 11/04/2016
f1_keywords: ["C2991"]
helpviewer_keywords: ["C2991"]
ms.assetid: a87e4404-26e8-4927-b3ee-5d02b3b8bee1
---
# Compiler Error C2991

redefinition of type parameter 'parameter'
> redefinition of type parameter 'parameter'

## Remarks

There was a type conflict between two generic or template definitions of `parameter`. When defining multiple generic or template parameters, you must use equivalent types.

The following sample generates C2991:
## Examples

The following example generates C2991:

```cpp
// C2991.cpp
Expand Down
13 changes: 7 additions & 6 deletions docs/error-messages/compiler-errors-2/compiler-error-c2992.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
---
description: "Learn more about: Compiler Error C2992"
title: "Compiler Error C2992"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2992"
ms.date: 11/04/2016
f1_keywords: ["C2992"]
helpviewer_keywords: ["C2992"]
ms.assetid: 01b16447-43fe-4e91-9a5a-af884a166a31
---
# Compiler Error C2992

'class' : invalid or missing type parameter list
> 'class' : invalid or missing type parameter list

## Remarks

The class is preceded by a **`template`** or **generic** keyword with missing or invalid parameters.

## Example
## Examples

The following sample generates C2992:
The following example generates C2992:

```cpp
// C2992.cpp
Expand Down
12 changes: 8 additions & 4 deletions docs/error-messages/compiler-errors-2/compiler-error-c2993.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
---
description: "Learn more about: Compiler Error C2993"
title: "Compiler Error C2993"
ms.date: "10/03/2023"
description: "Learn more about: Compiler Error C2993"
ms.date: 10/03/2023
f1_keywords: ["C2993"]
helpviewer_keywords: ["C2993"]
---
# Compiler Error C2993

'identifier' : illegal type for non-type template parameter 'parameter'
> 'identifier' : illegal type for non-type template parameter 'parameter'

## Remarks

- Prior to C++20, you cannot declare a template with a structure, class, or union argument. Pointers can be used in place of these types as template parameters.
- Since C++20, structure, class, or unions *can* be used as non-type template parameters. A non-type template parameter can't be a rvalue reference type or a parameter pack of rvalue types.

The following sample generates C2993:
## Examples

The following example generates C2993:

```cpp
// compile with: /c and /std:c++17
Expand Down
9 changes: 5 additions & 4 deletions docs/error-messages/compiler-errors-2/compiler-error-c2994.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
---
description: "Learn more about: Compiler Error C2994"
title: "Compiler Error C2994"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2994"
ms.date: 11/04/2016
f1_keywords: ["C2994"]
helpviewer_keywords: ["C2994"]
ms.assetid: b03570b5-e5fd-41d8-bdf1-dfadc2b1e116
---
# Compiler Error C2994

unnamed class in template parameter list
> unnamed class in template parameter list

## Remarks

You cannot use the **`class`** keyword as a template argument without specifying a class name.
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c2995.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C2995"
title: "Compiler Error C2995"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2995"
ms.date: 11/04/2016
f1_keywords: ["C2995"]
helpviewer_keywords: ["C2995"]
ms.assetid: a57cdfe0-b40b-4a67-a95c-1a49ace4842b
---
# Compiler Error C2995

'function' : function template has already been defined
> 'function' : function template has already been defined

## Remarks

Make sure that there is only one definition for each member function of a templated class.

The following sample generates C2995:
## Example

The following example generates C2995:

```cpp
// C2995.cpp
Expand Down
9 changes: 5 additions & 4 deletions docs/error-messages/compiler-errors-2/compiler-error-c2996.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
---
description: "Learn more about: Compiler Error C2996"
title: "Compiler Error C2996"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C2996"
ms.date: 11/04/2016
f1_keywords: ["C2996"]
helpviewer_keywords: ["C2996"]
ms.assetid: f0ca9f8b-1751-4182-adab-1424f0c5e0c0
---
# Compiler Error C2996

'function' : recursive function template definition
> 'function' : recursive function template definition

## Remarks

A function definition attempts to instantiate its root templated class. Recursive template instantiations are not allowed.
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c3001.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C3001"
title: "Compiler Error C3001"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C3001"
ms.date: 11/04/2016
f1_keywords: ["C3001"]
helpviewer_keywords: ["C3001"]
ms.assetid: d0e03478-1b44-47e5-8f5b-70415fa1f8bc
---
# Compiler Error C3001

'error_text' : expected an OpenMP directive name
> 'error_text' : expected an OpenMP directive name

## Remarks

The `omp` pragma must be followed by a directive.

The following sample generates C3001:
## Example

The following example generates C3001:

```c
// C3001.c
Expand Down
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c3002.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C3002"
title: "Compiler Error C3002"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C3002"
ms.date: 11/04/2016
f1_keywords: ["C3002"]
helpviewer_keywords: ["C3002"]
ms.assetid: 2d4241a7-c8eb-4d43-a128-dca255d137bc
---
# Compiler Error C3002

'name1 name2' : multiple OpenMP directive names
> 'name1 name2' : multiple OpenMP directive names

## Remarks

Multiple directive names are not allowed.

The following sample generates C3002:
## Example

The following example generates C3002:

```c
// C3002.c
Expand Down
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c3003.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C3003"
title: "Compiler Error C3003"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C3003"
ms.date: 11/04/2016
f1_keywords: ["C3003"]
helpviewer_keywords: ["C3003"]
ms.assetid: 22e74f99-bb7f-4518-ab0d-934d5d49bcc7
---
# Compiler Error C3003

'directive' : OpenMP directive name not allowed after directive clauses
> 'directive' : OpenMP directive name not allowed after directive clauses

## Remarks

An OpenMP directive name cannot follow an OpenMP directive clause.

The following sample generates C3003:
## Example

The following example generates C3003:

```c
// C3003.c
Expand Down
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c3004.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C3004"
title: "Compiler Error C3004"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C3004"
ms.date: 11/04/2016
f1_keywords: ["C3004"]
helpviewer_keywords: ["C3004"]
ms.assetid: 819c2b57-8366-4ca7-9135-1f0c5e5b6bb6
---
# Compiler Error C3004

'clause' : clause not valid on OpenMP 'directive' directive
> 'clause' : clause not valid on OpenMP 'directive' directive

## Remarks

An OpenMP clause was used on a directive for which it is not enabled.

The following sample generates C3004:
## Example

The following example generates C3004:

```c
// C3004.c
Expand Down
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c3005.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C3005"
title: "Compiler Error C3005"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C3005"
ms.date: 11/04/2016
f1_keywords: ["C3005"]
helpviewer_keywords: ["C3005"]
ms.assetid: 30bad565-e79f-4c3f-82cb-a74bd0baab8f
---
# Compiler Error C3005

'error_text' : unexpected token encountered on OpenMP 'directive' directive
> 'error_text' : unexpected token encountered on OpenMP 'directive' directive

## Remarks

An OpenMP directive was ill formed.

The following sample generates C3005:
## Examples

The following example generates C3005:

```c
// C3005.c
Expand Down
13 changes: 8 additions & 5 deletions docs/error-messages/compiler-errors-2/compiler-error-c3006.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
---
description: "Learn more about: Compiler Error C3006"
title: "Compiler Error C3006"
ms.date: "11/04/2016"
description: "Learn more about: Compiler Error C3006"
ms.date: 11/04/2016
f1_keywords: ["C3006"]
helpviewer_keywords: ["C3006"]
ms.assetid: 449082ec-fd45-4c47-8ab3-ba6a719e4dc4
---
# Compiler Error C3006

'clause' : clause on OpenMP 'directive' directive is missing an expected argument
> 'clause' : clause on OpenMP 'directive' directive is missing an expected argument

## Remarks

An OpenMP directive did not have an expected argument.

The following sample generates C3006:
## Example

The following example generates C3006:

```c
// C3006.c
Expand Down
Loading