The template canSwapEndianness is defined as "isIntegral!T || isSomeChar!T || isBoolean!T || isFloatOrDouble!T" but in the function "swapEndian(T)(T val)" it only supports an "integral value or character". I don't see why swapEndian shouldn't support floating point types when read, write, append and peak do.