aşağıdaki kod parçasını atın:referanslar ve statik sınıf üyeleri
BuFoo
tam olarak aynısını yapar çünkü Kafamı kurcalayan Clang 3.3 ve GCC 4.8.1
("undefined reference to Foo<int, 123>::value")
altında derlemeye reddeder
#include <type_traits>
#include <iostream>
template <class T>
void print(T &&t){
std::cout << t << std::endl;
}
template<class T, T val>
struct Foo{
static constexpr T value = val;
};
int main(){
print(Foo<int, 123>::value);
}
std::integral_constant
ve aynı kod integral_constant
ile düzgün çalışır. Yazdırma işlevinde düz lvalue referansı ile de başarısız olur. Bu davranışla ilgili herhangi bir açıklama var mı?
sorunu da bu oldukça az örnekle mevcuttur: derleyici diyor
template<class T>
struct Bar{
static const bool value = true;
};
Örneğiniz, derhal çalışır ve çalışır [on()] (http://ideone.com/BJLEuL). Belki bir derleyici sorunu? – djf
Derleyici sürümlerinde düzenledim; Ideone muhtemelen büyük şeyler kullanır. –
Şimdi bu oldukça ilginç: http://www.compileonline.com hatayı atıyor ama Ideone gibi gcc 4.7.2'ye sahip. –