[Bugfix][Backport] Fix SFINAE logic picking specialization for global functions
As discussed in FS#1179, the SFINAE logic responsible for picking the correct implementation for global functions tests for the presence of the member name Traits::dimDomain to make its decision. Unfortunately, this test relies on a narrowing conversion that has been removed from C++11, so the SFINAE incorrectly fails on clang (GCC still accepts the narrowing conversion). The initial suggestion of just using (Basis::Traits::dimDomain,true) for the condition fails on GCC < 4.6 and generates warnings on newer versions. So, it's time for the infamous mantra of the additional indirection: This patch wraps the value of dimDomain in an integral_constant and stuffs the resulting type into AlwaysTrue. That fix works on GCC4.[2..8] and recent versions of clang without generating a warning. Fixes FS#1179.