Synax para funciones distintas de vértice | fragment | kernel en file de sombreado de metal

Estoy portando un código OpenCL básico a un sombreador de cómputo de Metal. Se atasque bastante temprano cuando intente convertir las funciones auxiliares diversas. Por ejemplo, incluyendo algo así como la siguiente function en un file .metal Xcode (7.1) me da una advertencia de "Ningún prototipo previo para la function"

 float maxComponent(float4 a) { return fmax(ax, fmax(ay, fmax(az, aw))); } 

¿Cuál es la forma "metálica" de hacer esto?

Tres forms que conozco:

(Reescribí la function para que sea una sobrecarga y para que sea más legible para mí).

De hecho, declara el prototipo:

 float fmax(float4 float4); float fmax(float4 float4) { return fmax( fmax(float4[0], float4[1]), fmax(float4[2], float4[3]) ); } 

Alcance a un file con estática:

 static float fmax(float4 float4) { return fmax( fmax(float4[0], float4[1]), fmax(float4[2], float4[3]) ); } 

Envuélvalo en un espacio de nombres anónimo:

 namespace { float fmax(float4 float4) { return metal::fmax( metal::fmax(float4[0], float4[1]), metal::fmax(float4[2], float4[3]) ); } }