>>404
if での判断をコンパイル時にしたいというのが目的であればいいけどそれが設計的に妥当かどうかは全体を見ないとわからないからね……
もしもモードに応じてコンパイル時に挙動を分けたい箇所がたくさんあったりするならトレイトとして括り出したほうがいいかなとかいうことを私なら検討するかも。
これなら C++03 時代の言語機能でもコンパイル時に分岐できるくらい素朴だし、ロジック本体から分岐を消せるし。

#include <iostream>

template<int mode>
struct mode_traits {
static const char *message;
};

template<int mode> const char* mode_traits<mode>::message="bbb";

template<>
struct mode_traits<100> {
static const char* message;
};

const char* mode_traits<100>::message="aaa";

int main(void) {
const int mode = 100;
std::cout << mode_traits<mode>::message;
}