我应该避免使用任何特定于编译器的或非标准的c ++功能吗? [关闭]

在处理一些“有趣”的constexpr东西时,我试图强制在编译时对函数进行求值,也想知道为什么它会失败,并尝试将大小强制为静态数组,因为我(错误地)认为静态数组就像需要在编译时评估其大小。看起来像这样:

template<typename... Args>
constexpr int endlessReccursion() {
    return 1 + endlessReccursion<Args...>();
}

int main() {
    int arr[endlessReccursion<double,int>()];
}

而这奇怪地足以编译。事实证明,尽管我相信这是对的,但在ISO C ++标准中,gcc和clang都允许dyn数组不属于C99标准,这使我想到...还有其他常用的,特定于编译器的吗?还是我应该了解的非标准C ++陷阱?