I use a mix of both.
For roughing and planar finishing operations, I use g40 and rely on cam software for the tool diameter. I would imagine this allows older controls to work a little bit faster without needing to do the comp calculations, though it probably doesn't matter.
When finishing a 2d profile, I almost always use cutter comp. Its convenient for me because I have a library of set tools (100+, I also use fadals, info for tools over number 99 are stored in the cam software). If you use new tools for every program, its easy to get burned if you forget to set the new tool diameter in the control.
If I really want to hold a profile tightly, I take it a step farther. In the cam side of things I added a checkable option for high accuracy profiles. It creates a loop in the main program that lets you cut, recut, and adjust the cutter comp until the profile you are machining to is the exact size you want without ever needing to exit, rewrite, reload, or resume from a line the program.
This is a sample code I pulled from a program
(0.375 2 FLUTE LONG REACH)
T1 G43 M06
M00
(Place Tool No 71 in the spindle)
H71 Z0.2500
S2547 M03
M08
G00 X-14.5180 Y26.8393
(TOOL NO 71 -- 0.375 2 FLUTE LONG REACH Coolant Flood)
(1 Passes Per Profile )
(0.5000 Target Depth)
G40
G10 L12 P71 R0+0.3810
[Here we set the cutter so it will leave 0.003 stock per side on the first pass]
#:RERUN1
[here is where the loop starts]
H71 Z0.2500
S2547 M03
G04 P2000.0
M08
F10.2
G00 X-14.3265 Y26.8393
G41 X-14.5180 Y26.8393
G00 Z-0.5000
G01 X-14.5180 Y26.3143
G03 X-13.7430 Y25.5393 I0.7750 j0.0000
G01 X-11.2360 Y25.5393
G03 X-10.6686 Y25.7864 I0.0000 j0.7750
G02 X-8.6918 Y25.7864 I0.9884 j-0.9196
G03 X-8.1244 Y25.5393 I0.5674 j0.5279
G01 X-5.5615 Y25.5393
G03 X-4.7865 Y26.3143 I0.0000 j0.7750
G01 X-4.7865 Y26.8393
G00 Z0.2500
G40
M5 M9
M00
(CHECK POCKET SIZE)
#WAIT
(ENTER STOCK TO REMOVE FROM WALLS ON NEXT PASS -- POSITIVE NUMBER ONLY)
(ENTER 0.0 IF WALLS ARE TO SIZE)
#INPUT V3
#IF V3<=0.0 THEN GOTO
ONE1
[if no stock remains, profile is done]
# D71 = D71 - (V3*2)
[if stock remains, adjust the tool diameter]
#WAIT
#PRINT D71
#INPUT V99
#GOTO :RERUN1
[loop back thru and recut profile]
#
ONE1
G10 L12 P71 R0+0.3750
[reset tool to nominal diameter when done]
M05 M09
G28