We recommend using Visual Studio 2017

Compiler Error C2179


The latest version of this topic can be found at Compiler Error C2179.

type' : an attribute argument cannot use type parameters

A generic type parameter is resolved at runtime. However, an attribute parameter must be resolved at compile time. Therefore, you cannot use a generic type parameter as an argument to an attribute.

The following sample generates C2179.

// C2179.cpp  
// compile with: /clr  
using namespace System;  
public ref struct Attr : Attribute {  
   Attr(Type ^ a) {  
      x = a;  
   Type ^ x;  
ref struct G {};  
generic<typename T>   
public ref class Z {   
   Type ^ d;  
   [Attr(T::typeid)]   // C2179  
   // try the following line instead  
   // [Attr(G::typeid)]  
   T t;