При создании объекта 'a' класса S3 компилятор выбирает вызов конструктора S2, которому передается экземпляр S1, а затем, получившийся объект класса S2 передается в конструктор S3. Меня это устраивает, но возникает вопрос: какое место стандарта С++ заставляет использовать такой путь, а не вызывать оператор преобразования типа для объекта класса S1? Это явно связано с положениями стандарта, т.к. разные компиляторы ведут себя одинаково.