考虑这个代码片段,
template<bool b>
struct other
{
static const bool value = !b;
};
template<bool b>
struct test
{
static const bool value = b || other<b>::value;
};
int main()
{
bool value = test<true>::value;
}
other<true>
当实例化似乎完全没有必要时,编译器是否会在上述情况下实例化?或者仅仅因为我已经编写了语法,编译器必须实例化它,而不管它对?other<b>::value
的值的计算完全没有贡献。test<true>::value
我想听听,a)标准要求什么,以及 b)各种编译器实际实现了什么?标准中的相关部分将不胜感激。