CTAD (Class Template Argument Deduction); template fonksiyonlara ilişkin deduction guide line gibi sınıflar için de benzer şekilde C++17 ile standartlara gelmiştir. Bu sayede sınıflara ilişkin doğrudan explicit olarak belirtmeye gerek kalmadan bu görevi de compiler' a havale edilmesi sağlanmıştır. Ve daha kısa ve anlaşılır kodlar yazılmasına olanak sağlanmıştır. CTAD 'ın daha anlaşılır olması için aşağıdaki iki örneğe bakalım.
C++17 öncesi |
Yukarıdaki örnek için C++17 öncesi class template argument 'lerini doğrudan (explicit) olarak bildirmemiz gerekmektedir. Aksi halde hata ile karşılaşılmaktadır. Fakat C++17 ile bu problemler çözülmüştür.
C++17 sonrası |
Şimdi tam bir template class yazalım ve C++ 'in 11 - 14 ve 17 standartlarına göre derlemeye çalışalım.
Yukaridaki örneği C++11 ve C++14 ile derlemeye çalıştığımız zaman aşağıdaki gibi bir hata ile karşılaşılmaktadır. Fakat C++17 ile derledigimiz zaman ise sorunsuz derlenebilmektedir.
C++17 öncesi için yukaridaki problem aşağıdaki şekilde kodu güncelledigimiz zaman ortadan kalkmaktadir.