Temel olmayan bir şeyi kaçırıyor gibi görünüyor. Derleme zamanında const dizisi üyelerini kullanmaya çalışıyorum.Derleme zamanı dizi sabitleri
const int list[3] = { 2, 5, 7 };
const int a = list[2]; // this doesn't error?
template<int N1, int N2>
struct tmax {
enum { value = ((N1 > N2) ? N1 : N2) };
};
const int b = tmax<2,4>::value;
const int c = tmax<list[0],list[1]>::value; // error is here
int main()
{
return 0;
}
hatalar: Burada
prog.cpp:10:24: error: 'list' cannot appear in a constant-expression
prog.cpp:10:30: error: an array reference cannot appear in a constant-expression
Peki neden bu işi yapar relevent IDEOne link
mı? Neyi kaçırıyorum? Ne farklı yapmalıyım?
Constexpr'in yardımcı olacağını düşündüm ve şimdi görüyorum ki düşündüğümden daha geniş bir evlatlık var. Bununla birlikte, özellikle const [1] listesindeki bir yapının bildirilmesinin neden özel olarak anlaşılmayacağı ile ilgili bir açıklama. Teşekkür ederim. –
Tamam, bu yüzden görsel stüdyo 2012, constexpr'ı desteklemeyi planlamıyor. Başka bir çözümü olan var mı? Bunu bunun için kullanmam gerekmiyor, ama güzel olurdu. –
@ std''OrgnlDave Tam olarak neden listenin [1] sabit bir ifade olmadığını açıklayan daha fazla derleyici tanılama ekledim. – bames53