Рассмотрим следующий код:
#include <memory>
void f( std::shared_ptr<int> ) {}
int main()
{
f( 0 ); // compiles fine in gcc and clang
f( 1 - 1 ); // compiles fine in gcc, fails in clang
constexpr int i = 0;
f( i ); // fails to compile in gcc and clang
f( i - 0 ); // compiles fine in gcc, fails in clang
}
почему только f( i )
не удается скомпилировать, хотя i
следует оценивать как константу времени компиляции со значением 0?
PS проверяется с помощью g++ v 5.1.0, он принимает все варианты, кроме f(i);
в обоих режимах С++ 11 и С++ 14
PPS проверяется с помощью clang 3.7, он отклоняет все варианты, кроме буквального 0, как в режиме С++ 11, так и в режиме С++ 14