Читая об аргументах шаблона не-типа, я наткнулся на эту статью.В своем примере они определяют шаблон класса Myfilebuf
следующим образом:
template<class T, int size> class Myfilebuf
{
T* filepos;
static int array[size];
public:
Myfilebuf() { /* ... */ }
~Myfilebuf()=default; // I made little changes here, to make the code compilable.
};
В следующем примере они используют этот шаблон класса, чтобы объяснить, какие вызовы этого класса шаблона возможны, а какие нет.т.Примеры, которые они приводят, следующие:
Myfilebuf<double, (75>25)> x; // valid
Myfilebuf<double,200.0> y; // error, 200.0 is a double, not an int
Так что теперь мне было интересно, поскольку (75> 25) равно bool
, а не int
.Я попробовал код, и он работает (см. здесь ), поэтому здесь возможна неявная приведение от bool
до int
, но не от double
до int
.
После просмотраВ этом поведении я попробовал эти кастинги без шаблонов, и они оба работают нормально:
#include <iostream>
int main() {
int anInt;
bool aBool=true;
double aDouble=0.;
anInt=aBool;
std::cout<<anInt<<"\n";
anInt=aDouble;
std::cout<<anInt<<"\n";
return 0;
}
Я изо всех сил пытаюсь понять это поведение.Может ли кто-нибудь помочь мне здесь?