A
Adam S
Is it ok to use the bit shift operator when initializing enum values ?
The code below does some unexpected initialization of N in template
class ClassTwo. I pretty sure its a bug in Borland C v5.6 as GNU C++
v3.4.4 always prints the first line "1024";
----------------------------------------------------
#include <iostream>
template<int N> class ClassOne {
public:
void printN() { // print value of N
std::cout << N <<"\n";
}
};
template<int> class ClassTwo {
enum {N = 1<<10 };
enum {U = 1024 };
public:
ClassOne<N> testone1;
ClassOne<U> testone2;
ClassOne<1024> testone3;
ClassOne<(1<<10)> testone4;
void printN() {
std::cout << N <<"\n";
}
};
main() {
ClassTwo<0> tp;
tp.testone1.printN(); // prints "0"
tp.testone2.printN(); // prints "1024"
tp.testone3.printN(); // prints "1024"
tp.testone4.printN(); // prints "1024"
tp.printN(); // prints "1024"
return 0;
}
The code below does some unexpected initialization of N in template
class ClassTwo. I pretty sure its a bug in Borland C v5.6 as GNU C++
v3.4.4 always prints the first line "1024";
----------------------------------------------------
#include <iostream>
template<int N> class ClassOne {
public:
void printN() { // print value of N
std::cout << N <<"\n";
}
};
template<int> class ClassTwo {
enum {N = 1<<10 };
enum {U = 1024 };
public:
ClassOne<N> testone1;
ClassOne<U> testone2;
ClassOne<1024> testone3;
ClassOne<(1<<10)> testone4;
void printN() {
std::cout << N <<"\n";
}
};
main() {
ClassTwo<0> tp;
tp.testone1.printN(); // prints "0"
tp.testone2.printN(); // prints "1024"
tp.testone3.printN(); // prints "1024"
tp.testone4.printN(); // prints "1024"
tp.printN(); // prints "1024"
return 0;
}