I'm trying to figure out why the following GLSL code doesn't work:

```
#ifndef VertexPositionType
#define VertexPositionType vec3
#endif

in StandardVertexShaderInputs {
    VertexPositionType ds_VertexPosition;
};

vec4 ProjectVertexPosition(in vec4 v);

vec4 ProjectVertexPosition(in vec3 v);

void main() {
    gl_Position = ProjectVertexPosition(ds_VertexPosition);
}

```

The shader refuse to compile. The info log state:

> 
> error C1008: undefined variable "ProjectVertexPosition"
> 
> 
> 

Even if it doesn't warn about the preprocessor, I got that the preprocessor symbol *VertexPositionType* is not replaced. If I remove the preprocessor definitions, everything is fine.

Now, the specification says:

> 
> *#define* and *#undef* functionality are defined as is standard for C++ preprocessors for macro definitions both with and without macro
>  parameters.
> 
> 
> 

Perhaps the following line is not a valid preprocessor line?

```
#define VertexPositionType vec3

```