Oczywiście, jeśli znajdziesz pare fajnych opcji kompilatora, to da radę. Warto by np. wyłączyć wkompilowywanie biblioteki standardowej niestety nie pamiętam, co to za opcja była w gcc. Jednak MBR, czyli pierwsze 512 bajtów bootloadera będzie bardzo ciężko ze względu na ograniczenie rozmiaru, kombinacje z rejestrami segmentowymi i sygnatury na końcu sektora. Lepiej, aby MBR oprogramowany w asmie doładowywał sobie z dysku potrzebne segmenty, które były pisane w C.
Nie wiem też, jak z kodem 16-bitowym jest w kompilatorach, bo ja miałem problem z uzyskaniem go, ale pewnie da radę, a jak nie, to kod w MBR może przeżucić procka w tryb 32-bitowy.
Prawdopodobnie z pisaniem w C++ (mam na myśli objektowość) również byłby problem, bo objekty wymagają operatora "new", który tak naprawdę robi trochę magii i wywołuje maloc() z C, a we wczesnej fazie włączania komputera jaką jest kod bootloadera takie wysokopoziomowe API jak ochrona pamięci żadko kiedy jest osiągalne. Raczej implementuje to OS. Ewentualnie można by to symulować zwracając wskaźnik do jakiegoś wolnego miejsca w pamięci, ale czy ma to sens?