c++ - template member of std::pair<> must have const copy constructor. How to implement that constraint -


c++11 standard require template member of std::pair<> must have const copy constructor. otherwise, not compile.(from book the c++ standard library, nicolai m. josuttis.). so, code below wouldn't compile if it's against c++11 standard:

class a{     int i; public:     a(){}     a(a&){}  };  int main(){     pair<int, a> p; } 

with -std=c++11, g++ compiler report error:

constexpr std::pair<_t1, _t2>::pair(const std::pair<_t1, _t2>&) [with _t1 = int; _t2 = a]' declared take const reference, implicit declaration take non-const:

            constexpr pair(const pair&) = default 

that because declare a's copy constructor non-const. if change a(a&){} a(const a&){}, or remove -std=c++11 flag, fine.

my question is, how constaint implemented? can see no support in language provide inside template parameter t. mean, declared this:

template<typename t1, typename t2> class pair{     ...     //how know whether constructor of t1 , t2 const ?     ... }; 

how know whether constructor of t1 , t2 const or not

//how know whether constructor of t1 , t2 const ?

you use std::is_copy_constructible.


Comments

Popular posts from this blog

gridview - Yii2 DataPorivider $totalSum for a column -

java - Suppress Jboss version details from HTTP error response -

Sass watch command compiles .scss files before full sftp upload -