I do not think anyone actually trades this but in any case, it would follow standard pricing logics.
If you have a strike of truly 0, volatility does not matter anymore. The expected future value of unconditionally receiving the stock equals the forward. However, with options, the stock is received conditionally on the probability N(d2), the (risk neutral) probability of the option expiring in the money. In the case of a zero strike option, this probability is 1, no matter what. You can check out this answer for some related details.
So you know you will use this right for sure (you can buy the underlying for "free"). What matters is the forward at that time (which you discount to get the current options price).
In case of zero dividend and interest rates, the forward will be idenical to spot, and your option is worth the spot value. In case of dividends, you have to look at the forward. Below is a bit of Julia code to showcase this.
# load packages
using Pkg, Distributions, DataFrames, Plots, PlotThemes
# define cdf
N(x) = cdf(Normal(0,1),x)
# generic Black Scholes pricer
d1 = ( log(S/K) + (rf - d + 1/2*σ^2)*t ) / (σ*sqrt(t))
d2 = d1 - σ*sqrt(t)
c = exp(-d*t)S*N(d1) - exp(-rf*t)*K*N(d2)
s = 4000.00 # spot
k = 4000.00 # strike
σ = 15/100 # IVOL
t = 90 / 365 # time to maturity in years
r = 0.1 / 100 # interest rates
r = log(1+r*t)/t # continous rates
d = 1.5/100 # dividends
d = log(1+d*t)/t # cont. divs
DataFrame(Call = BSM(s,k,t,r,d,σ))
This value should match pricers like Bloomberg's OVME exactly.
Now, if you set set k = 0 you get the discounted fwd.
The following lines compute the option value for different values of IVOL
k = 0
σ = 0.01:0.01:30 # 0.1 is 10% (meaning 30 is very unrealistically high)
legend = false,
title = "ATM Option value for different IVOL",
xlabel = "IVOL",
ylabel = "Option value")
compared to the value of an ATM option (see here for an explanation of what happens to call and put options if IVOL tends to infinity).