I think I remember reading that even when you use zeros , you may not get the exact maturity desired . Lets say you have a maturity of liability set to 3 years , but available instruments are 2 years . So you have to go for 2 , then roll into a different bond upon maturity , and are subject to re-investment risk. In other words you may not be able to match the cash flows exactly
^ Correct, unless you can perfectly match up the cash flows, you will be exposed to reinvestment risk if the closest bond matures before the liability date. If the closest bond matures after the liability date, you will be exposed to interest rate risk.
cash flow matching has a HUGE amount of reinvstment risk because you are relying on the reinvestments of the coupons to continue to match your liabilities. that is precisely why conservative reinvestment rates are assumed.