Почему emplace_back
ссылается на элемент, требующий определения? В чем разница между emplace_back(integer literal)
и emplace_back(static constexpr integer member)
?
Если я переключусь на С++ 17, он компилируется отлично. Я обнаружил, что в С++ 17 статические элементы данных constexpr неявно встроены. Означает ли это, что компилятор неявно создает для них определение?
Пример кода:
class base {
int n;
public:
base(int n):n(n) {}
};
struct base_trait {
static constexpr int n = 1;
};
int main(void) {
vector<base> v;
v.emplace_back(1); // ok
v.emplace_back(base_trait::n); // link error with -std=c++14, ok with -std=c++17
return 0;
}