inconsistent use of 'double' in the specification?

I started reading the specification for OpenCL, and admit I am somewhat confused about the data types section with respect to ‘double’.

based on 6.1.1, double is not a “built-in scaler data type.”

based on 6.1.3, double is not an “other built-in data type.”

So at this point, it seems either double is not built-in or it is not scaler.

The description for “long double” in table 6.4 in section 6.1.4, suggests that double is scaler. It is also apparent that the word double is a reserved data type.

So at this point, it seems that double is conclusively not built-in, but that perhaps a future version of OpenCL will support double.

However, continuing on with the specification, I find example code in:

“Section: Reinterpreting Types Using Unions”

that uses “double.”

So, does this example code not meet the specification?

I guess I answered my own question, once I got to section 9.3

In the process, I also noticed that section Reinterpreting Types Using as_typen()

also uses ‘double’ in its example code.

(so I guess these examples rely on an optional extension).

“double” is an optional OpenCL extension. It is not required for an implementation to support to be OpenCL compliant.

When supported, they are available in both scalar and vector form, and have intrinsic function support, etc. Basically, just like “float” but with more precision.