Andrei Alexandrescu

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Andrei Alexandrescu
Alexandrescu at ACCU 2009
Born 1969 (age 44–45)
Bucharest,[1] Romania
Nationality Romanian, American [2]
Education Politehnica University of Bucharest and University of Washington
Occupation Research scientist at Facebook
Known for Expert on C++ and D programming[3]
Spouse(s) Sanda Alexandrescu

Andrei Alexandrescu is a Romanian-American C++ and D language[3] programmer and author. He is particularly known for his pioneering work on policy-based design implemented via template metaprogramming. These ideas are articulated in his book Modern C++ Design and were first implemented in his programming library, Loki. He also implemented the "move constructors" concept in his MOJO library.[4] He contributed to the C/C++ Users Journal under the byline "Generic<Programming>". Alexandrescu is currently a research scientist at Facebook.

He became an American citizen in August 2014.[5]

He is a developer of the D programming language.

Education and career[edit]

Alexandrescu received a B.S. degree in Electrical Engineering from Polytechnic University of Bucharest (Universitatea Politehnica din Bucureşti) in July 1994.[6][7]

His first article was published in the C/C++ Users Journal in September 1998. He was a program manager for Netzip, Inc. from April 1999 until February 2000. When the company was acquired by RealNetworks, Inc., he served there as a development manager from February 2000 through September 2001.[6]

Alexandrescu earned an M.S. (2003) and a Ph.D. (2009) in computer science from the University of Washington.[8][9][10]

More recently, he has been assisting Walter Bright in the development of the D programming language. Alexandrescu released a book titled The D Programming Language in May 2010.

Alexandrescu, Herb Sutter, and Scott Meyers run C++ and Beyond, a small annual technical conference.



Expected is a template class for C++ envisaged by Andrei Alexandrescu which has been proposed for inclusion in Boost.[11] Alexandrescu proposes [12] Expected<T> as a class for use as a return value which contains either a T or the exception preventing its creation, which provides a improvement over use of either return codes or exceptions exclusively. Expected can be thought of as an extension to simpler Optional types in various languages such as Maybe, Option, Nullable, optional<T>

He explains the benefits of Expected<T> as:

  • Associates errors with computational goals
  • Naturally allows multiple exceptions in flight
  • Switch between error handling and exception throwing styles
  • Teleportation possible across thread boundaries, across nothrow subsystem boundaries and across time (save now, throw later)
  • Collect, group, combine exceptions


For example, instead of any of the following common function prototypes:

int parseInt(const string&); // Returns 0 on error and sets errno.


int parseInt(const string&); // Throws invalid_input or overflow

he proposes the following:

Expected<int> parseInt(const string&); // Returns an expected int: either an int or an exception


External links[edit]