if constexpr (condición) como condicional en tiempo de compilación

Quiero usar un constexpr bool (useF en el ejemplo a continuación) para habilitar una función en el siguiente código. Aquí, llamandoA::f(). Además, quiero ser la plantilla alias (a) servoid en el caso apago la función.

Intenté usar una declaración constexpr if, pero el cuerpo aún se está instanciando, lo que causa un error de compilación. Si uso una plantilla de contenedor (X), el cuerpo está siendo descartado como esperaba, pero eso me parece feo. ¿Hay alguna otra forma de hacer esto?

constexpr bool useF = false;

struct A {
    static void f() {}
};

using a = std::conditional<useF, A, void>::type;

template<typename L>
struct X {
    static void h() {
        if constexpr(std::is_same<L, A>::value) {
            L::f(); // not instantiated, no error
        }
    }
};

int main() {
    if constexpr(useF) {
        a::f(); // error!?
    }

    X<a>::h();
}

Estoy usando g ++ - 7.0.1 con -std = c ++ 17

Respuestas a la pregunta(1)

Su respuesta a la pregunta