    #include <iostream>
    #include <string>
    using namespace std;

    class A{
    };

    int main() {

	    // string::string(charT const* s)
	    string s1("12345");
	    // 5 - because constructor takes into account null-terminated character
	    cout << s1.size() << endl;		
	
	    // string(std::initializer_list<charT> ilist)
	    string s2({'1','2','3','4','5'});	
	    // 5 - because string is built from the contents of the initializer list init. 	
	    cout << s2.size()<<endl;
	
        // string::string(charT const* s, size_type count)
	    string s3("12345",3);
        // 3 -  Constructs the string with the first count characters of character string pointed to by s
	    cout << s3.size() << endl;

	    // basic_string( std::initializer_list<CharT> init,const Allocator& alloc = Allocator() ); - ?
	    string s4({'1','2','3','4','5'},3);
	    // 2 - why this compiles (with no warning) and what this result means?
	    cout << s4.size() << endl;
	
	
	
	    string s5({'1','2','3','4','5'},5);
	    // 0 - why this compiles (with no warning) and what this result means?
	    cout << s5.size() << endl;
	
	    // basic_string( std::initializer_list<CharT> init,const Allocator& alloc = Allocator() );
	    // doesn't compile, no known conversion for argument 2 from 'A' to 'const std::allocator<char>&'
	    //string s6({'1','2','3','4','5'},A());
	    //cout << s6.size() << endl;

	    return 0;
    }