Faza 7: Białe znaki oddzielające żetony nie mają już znaczenia. Każdy token przetwarzania wstępnego jest konwertowany na token. Otrzymane tokeny są analizowane składniowo i semantycznie oraz tłumaczone jako jednostka tłumaczeniowa.

Faza 8: Przetłumaczone jednostki tłumaczeniowe i jednostki instancyjne są łączone w następujący sposób: Każda przetłumaczona jednostka tłumaczeniowa jest sprawdzana w celu utworzenia listy wymaganych instancji. Znajdują się definicje wymaganych szablonów. To, czy źródło jednostek tłumaczeniowych zawierające te definicje ma być dostępne, jest zdefiniowane przez implementację. Wszystkie wymagane instancje są wykonywane w celu utworzenia jednostek instancji.[ Uwaga: Są one podobne do przetłumaczonych jednostek tłumaczeniowych, ale nie zawierają odniesień do szablonów nieinstancjalnych ani definicji szablonów. —przypis końcowy] Program jest źle sformułowany, jeśli jakakolwiek instancja nie powiedzie się.

Usunąłem część notatek, aby skrócić wklejony tekst.

Dlaczego lokalizowanie i tworzenie instancji szablonów jest wykonywane po tym, jak jednostka tłumaczeniowa została już przetłumaczona w fazie kompilacji C++ 8? Czy te kroki nie powinny mieć miejsca w fazie 7, biorąc pod uwagę dwufazowe wyszukiwanie nazwy?

2
Dan 1 październik 2012, 01:31

2 odpowiedzi

Najlepsza odpowiedź

Uważam, że ta część dotyczy wstępnej kompilacji typów szablonów. Dowolny typ, który jest szablonem, będzie „jednostką wystąpienia”. Jeśli typ szablonu jest wstępnie skompilowany, należy go obsłużyć w tej fazie.

0
CrazyCasta 1 październik 2012, 01:38